Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Методи управління транзакціями






Консервативні методи. Блокування – процедура, використовувана для управління паралельним доступом до даних. Коли деяка транзакція отримує доступ до БД, механізм блокування дозволяє (з метою виключення отримання некоректних результатів) відхилити спроби отримання доступу до цих даних з боку інших транзакцій.

Саме методи блокування найчастіше використовуються на практиці для забезпечення впорядкованості паралельно виконуваних транзакцій. Існує кілька різних варіантів цього механізму, проте всі вони побудовані на одному і тому ж фундаментальному принципі: транзакція повинна вимагати виконати блокування для читання (спільні) або для запису (ексклюзивний) деякого елементу даних перед тим, як вона зможе виконати в БД відповідну операцію читання або запису. Встановлений блок перешкоджає модифікації даних елемента іншими операціями або навіть зчитування його, якщо цей блок був встановлений для запису. Блокування може бути виконана для елементів різного розміру – починаючи з БД в цілому і закінчуючи окремим полем конкретного запису. Розмір блокованою елемента задається рівнем деталізації встановлюється блоку

Якщо транзакція встановила блокування елемента даних для читання, вона зможе вважати його, але не зможе оновити.

Якщо транзакція встановила блокування елемента даних для запису, вона може як читати, так і оновлювати цей елемент.

Оскільки операція читання не може служити причиною конфлікту, допускається встановлювати блокування для читання одного і того ж елемента одночасно з боку відразу декількох транзакцій. У той же час блокування елемента для запису надає транзакції ексклюзивне право доступу до нього. Отже, до тих пір, поки транзакція буде утримувати певний елемент заблокованим для запису, ніяка інша транзакція не зможе ні рахувати, ні оновити його. Для забезпечення впорядкованості слід використовувати додатковий протокол, що визначає моменти встановлення і зняття блокування для кожної транзакції. Найвідомішим з таких протоколів є метод двофазної блокування.

Двофазна блокування – це виконання транзакції за протоколом, при якому всі операції блокування передують першій операції розблокування.

Згідно з основним правилом цього протоколу кожна транзакція може бути розділена на дві фази: фазу наростання, в якій виконуються всі необхідні блокування і не звільняється жоден з елементів даних, і фазу стиснення, в якій звільняються всі виконані раніше блокування і не може бути затребувано ні однієї нової. Немає ніякої необхідності в тому, щоб всі необхідні блокування були встановлені одночасно. Як правило, транзакція встановлює деякі блокування, виконує певну обробку, після чого може зажадати установку додаткових необхідних їй блокувань. Однак вона не може звільнити ні один з блоків, поки не досягне тієї стадії, на якій їй вже не буде потрібно установка нових блокувань.

Є одна проблема, пов'язана з двофазною блокуванням, яка може мати місце при будь-яких схемах звільнення заблокованих елементів. Ця проблема носить назву взаємного блокування і є наслідком того факту, що будь-яка транзакція може бути переведена в стан очікування звільнення необхідного елемента даних. Якщо дві транзакції будуть очікувати звільнення елементів, заблокованих інший транзакцією з цієї ж пари, то виникне стан взаємного блокування. Для виключення самоблокировок може використовуватися система пріоритетів, в якій пріоритет транзакції тим вище, чим довше вона перебуває в стані очікування. Альтернативним варіантом є використання для очікують черги транзакцій, побудованій за схемою «першим прийшов, першим обслуговується». Однак найчастіше вдаються до найпростішого варіанту: вибирають в якості жертви одну з транзакцій і просто її відкочують. Ці дії, безумовно, можуть вплинути на ефективність роботи системи.

Один з можливих підходів запобігання взаємних блокувань полягає у встановленні порядку виконання транзакцій на основі використання тимчасових позначок, про що буде сказано нижче. Були запропоновані два можливих алгоритму. Перший алгоритм, який отримав назву «очікування – скасування», вимагає, щоб більш старі транзакції очікували завершення більш нових. В іншому випадку транзакція скасовується і перезапускається з тієї ж тимчасової відміткою. Однак рано чи пізно вона стане найстарішою з активних транзакцій і вже не буде скасована. Другий алгоритм, «відміна – очікування», використовує діаметрально протилежний підхід: тільки більш нові можуть чекати завершення попередньої операції. Якщо стара транзакція вимагатиме виконання блокування елемента даних, вже заблокованого більш нової транзакцією, остання буде скасована. Іноді для запобігання тупиків система будує граф виконання транзакцій і намагається заздалегідь визначити тупикові ситуації.

Методи часових відміток (timestamp), що застосовуються для контролю цілісності даних, не потрібно використання будь-яких блокувань, і, отже, виключається можливість виникнення взаємних блокувань процесів. Методи блокування зазвичай усувають можливі конфлікти допомогою перекладу транзакцій в стан очікування. Методи з використанням часових відміток не передбачають будь-які очікування: залучені в конфлікт транзакції просто відміняються, після чого запускаються заново.

Часова позначка – це унікальний ідентифікатор, створюваний СУБД з метою позначення відносного моменту часу запуску транзакції.

Тимчасова відмітка може бути створена з використанням системних годин для фіксації моменту запуску транзакції або шляхом збільшення значення деякого логічного лічильника при кожному запуску чергової транзакції.

Складається протокол управління паралельністю, основна мета якого полягає у встановленні глобальної черговості виконання транзакцій, при якій більш старі транзакції (з меншим значенням тимчасової оцінки) мають більший пріоритет при вирішенні виникаючих конфліктів.

При використанні протоколу часових відміток, коли транзакція робить спробу читання або запису даних елемента, операція читання або запису виконується тільки в тому випадку, якщо останнє оновлення необхідного елемента даних було виконано більш старої транзакцією. В іншому випадку транзакція, запитала операцію читання або запису, скасовується і перезапускається з присвоєнням їй нової тимчасової позначки. Нова тимчасова позначка повинна бути присвоєна перезапускаемой транзакції для того, щоб запобігти попадання в цикл постійної скасування та перезапуску. Без отримання нової тимчасової оцінки транзакція з більш старої тимчасової відміткою не зможе завершити свою роботу, оскільки більш нова транзакція вже встигла зафіксувати свої результати в БД. Оптимістичні методи управління. В деяких типах обчислювальних систем конфлікти між транзакціями відбуваються дуже рідко, тому додаткова обробка, викликана підтримкою протоколів з блокуванням або з використанням часових міток, виявляється абсолютно зайвою для більшої частини транзакцій. Оптимістичні технології ґрунтуються на припущенні, що конфлікти в системі можливі нечасто, тому ефективніше буде організувати виконання транзакцій, виключивши всі затримки, пов'язані з досягненням гарантованої впорядкованості. Перед завершенням роботи транзакції виконується перевірка, яка визначає, чи мав місце конфлікт. Якщо це так, транзакція відкочується і перезапускається. Оскільки початково стверджується, що конфлікти в даній системі – явище нечасте, то і відкатів потрібно виконувати небагато. Додаткове навантаження, пов'язана з перезапуском деяких транзакцій, може виявитися досить значною, оскільки, по суті, вона буде пов'язана з повторним виконанням всієї операції в цілому. Тому застосування даної схеми має сенс тільки в тому випадку, якщо відкати будуть відбуватися досить рідко, а велика частина транзакцій в системі буде виконуватися без будь-яких додаткових затримок. Подібна технологія потенційно дозволяє досягти значно більш високого рівня паралельності порівняно з традиційними протоколами, оскільки не вимагає використання механізму блокувань.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.