Управління паралельною обробкою
В багатокористувацьких системах з БД одночасно можуть працювати декілька користувачів або прикладних програм. Для збереження цілісності даних і забезпечення безпеки БД в цих умовах застосовуються транзакції, які забезпечують роботу кожного користувача з узгодженим станом БД.
Транзакція − неподільна з точки зору впливу на БД послідовність операторів маніпулювання даними, яка розглядається СУБД як єдине ціле. Або транзакція успішно виконується, і СУБД фіксує зміни БД, які були зроблені цією транзакцією, у зовнішній пам'яті, або, у разі невдачі, жодна
зміна не відображається на стані БД. Транзакція розглядається як логічна одиниця роботи з БД. Для того, щоби використання механізмів обробки транзакцій дозволило забезпечити цілісність даних й ізольованість користувачів, транзакція повинна мати такі властивості: атомарність (Atomicity), узгодженість (Cosistency), ізольованість (Isolation), довготерміновість (Durability). Транзакції, які мають ці властивості називаються ACID-транзакціями. Властивості транзакції означають таке:
− атомарність означає, що транзакція виконується, як єдина операція доступу до БД і виконується або повністю або не виконується зовсім;
− узгодженість гарантує взаємну цілісність даних, тобто виконання обмежень цілісності БД після завершення роботи транзакції;
− ізольованість означає, що транзакції, які конкурують за доступ до БД, фізично обробляються послідовно, ізольовано одна від одної, але для користувачів це виглядає так, ніби вони виконуються паралельно;
− довготерміновість означає, що коли транзакція виконана успішно, то всі зміни, які вона зробила в даних, не будуть втрачені ні за яких обставин.
Для обробки паралельних транзакцій застосовується серіалізація транзакцій і метод тимчасових міток.
Серіалізація транзакцій − процедура, яка забезпечує підтримку незалежного виконання трансакцій. Це означає, що дія двох паралельно діючих транзакцій буде така сама, як і їх послідовна дія: спочатку перша, а потім друга, або навпаки − спочатку друга, а потім перша. У ході виконання транзакції користувач бачить тільки узгоджені дані і не бачить неузгоджених проміжних даних. Для підтримки паралельної роботи складається спеціальний план.
Для реалізації серіалізації транзакцій застосовується механізм блокувань. Блокування передбачає встановлення режиму доступу ( монопольного або сумісного) до деякого ресурсу даних, що дозволяє виключити доступ до нього одночасно з даною транзакцією інших транзакцій, в результаті якого може бути порушена логічна цілісність даних БД.
Об'єктом блокування може бути вся БД, окремі таблиці, сторінки, рядки.
Для підвищення ступеня паралельності доступу декількох користувачів до однієї БД використовуються такі блокування:
− нежорстке блокування або роздільне блокування (Shared − S-блокування); об'єкт блокується для виконання операції читання; об'єкти в цьому випадку не
змінюються у ході виконання транзакції і доступні іншим транзакціям також, але тільки в режимі читання;
− жорстке блокування або монопольне (eXclusive − X-блокування); об'єкт блокується для виконання операції запису, модифікації або вилучення. В цьому випадку виконується монопольне блокування об'єкта і об'єкт залишається недоступним іншим транзакціям до моменту завершення роботи даної транзакції.
Застосування різних типів блокувань призводить до тупиків. Тупикова ситуація виникає тоді, коли дві і більш транзакції одночасно знаходяться у стані очікування, причому для продовження роботи кожна з транзакцій очікує завершення роботи іншої транзакції.
Приклад. Нехай транзакція 1 в момент часу t1 блокує ресурс A, а транзакція 2 в момент часу t2 блокує ресурс B (рис.10.3). В момент часу t3
транзакції 1 потрібен ресурс B і вона очікує його звільнення транзакцією 2. В момент часу t4 транзакції 2 потрібен ресурс A і вона очікує його звільнення транзакцією 1. Транзакція 1 чекає транзакцію 2, транзакція 2 чекає транзакцію1.
Основою визначення тупикових ситуацій є побудова графа очікування транзакцій. Алгоритм виходу із тупика передбачає визначення транзакції-жертви. Після вибору такої транзакції виконується її відкат.
Для серіалізації транзакцій також застосовується двофазне блокування, яке полягає у такому:
− перед виконанням операцій з будь-яким об'єктом транзакція блокує цей об'єкт (накопичення захватів);
− після зняття блокування транзакція не повинна накладувати ніяких інших блокувань ( вивільнення захватів).
Дата добавления: 2015-01-13; просмотров: 1147;