БЛОКИРОВКА

Як було зазначено в розділі 161, всі проблеми, описані в розділі 162, можуть бути усунені за допомогою механізму управління паралельним виконанням, званого блокуванням У його основі лежить проста ідея – якщо для деякої транзакції А потрібно гарантія, щоб певний обєкт, в якому вона зацікавлена ​​(як правило, кортеж бази даних), не змінився якимось чином без її відома (як описано вище), вона набуває блокування на цей обєкт (як прийнято називати відповідну операцію) Неформально висловлюючись, наслідком придбання блокування є те, що до даного обєкту, умовно кажучи, блокуються доступ інших транзакцій, і тому, зокрема, запобігає можливість внесення ними змін Завдяки цьому транзакція А може продовжувати свої операції обробки в повній впевненості в тому, що даний обєкт залишиться в певному стані до тих пір, поки він потрібно для цієї транзакції

Нижче наведено більш докладний опис того, за яким принципом працює блокування

1 Насамперед, припустимо, що в системі підтримуються блокування двох ти пов: виняткові блокування (блокування X – exclusive) і колективні блоки ровки (блокування S – shared), які визначені, як зазначено в наступних двох абзацах

Примітка Блокування X і S іноді іменуються, відповідно, блокуваннями запису і блокуваннями читання Якщо не вказано інше, то в даній главі передбачається, що блокування X і S є єдиними доступними типами блокувань опис інших типів блокувань наведено в розділі 169 Крім того, якщо не вказано інше, передбачається, що єдиними типами обєктів бази даних, які можуть бути заблоковані, є кортежі опис інших можливостей також наведено в розділі 169

2 Якщо транзакція А володіє винятковою блокуванням (X), то запит від неко торою іншої транзакції в на отримання блокування кортежу t будь-якого типу не може бути негайно задоволений

3 Якщо транзакція А володіє розділяється блокуванням (S) кортежу t, то виконуємо ються наступні умови:

■ запит деякої іншої транзакції в на отримання блокування X кортежу t

не може бути негайно задоволений

■ запит деякої іншої транзакції в на отримання блокування S кортежу t може і повинен бути негайно задоволений (це означає, що з цього часу укладання транзакція в також буде володіти блокуванням S кортежу)

Ці правила можна успішно підсумувати за допомогою матриці сумісності типів блокувань (рис 165) Така матриця інтерпретується таким чином: розглянемо деякий кортеж t і припустимо, що транзакція А в даний час володіє блокуванням на t, яка позначена однією із записів в заголовках стовпців (дефіс

позначає, що блокування відсутній), а також припустимо, що деяка інша транзакція в видає запит на отримання блокування t, яка позначена однією із записів в заголовках рядків (для повноти тут також передбачений випадок відсутності блокування) У цій матриці N вказує на конфлікт (Запит транзакції в не може бути негайно задоволений), a Y вказує на сумісність (Запит транзакції в може і повинен бути негайно задоволений) Очевидно, що ця матриця є симетричною

Рис 165 Матриця сумісності

‘Для блокувань типів X і S

Тепер перейдемо до опису протоколу доступу до даних, або протоколу блокування,

який дозволяє використовувати тільки що описані блокування X і S для забезпечення того, щоб ніколи не виникали проблеми, описані в розділі 162

1 Транзакція, в якій потрібно виконати вибірку кортежу, повинна спочатку придбати блокування S на цей кортеж

2 Транзакція, в якій потрібно виконати оновлення кортежу, повинна спочатку придбати X блокування на цей кортеж В іншому випадку, якщо вона вже володіє блокуванням S на цьому кортежі, як відбувається в ситуації, коли виконується послідовність операцій вибірки та оновлення (RETRIEVE і UPDATE), то ця транзакція повинна, як прийнято називати така дія, розширити, або по висіть рівень блокування S до рівня X

Примітка У цей момент необхідно перервати виклад, щоб пояснити, що запити на отримання блокувань зазвичай бувають неявними – операція вибірки кортежу неявно запрошувати блокування S на відповідний кортеж, а операція поновлення кортежу неявно запрошувати блокування X (або неявно запрошувати розширення існуючої блокування S до рівня X) на відповідний кортеж Крім того, в цьому описі, як звичайно, під операцією поновлення маються на увазі будь-які операції вставки (INSERT) і видалення (DELETE), а також оновлення (UPDATE) як такі, але розглядаються правила вимагають певного уточнення з урахуванням особливостей операторів INSERT і DELETE У даному розділі додаткові відомості з цього питання не наведено

3 Якщо запит на блокування від транзакції в не може бути негайно удовлетво рен через те, що він конфліктує з блокуванням, якій вже володіє транзак ція А, то в переходить в стан очікування Транзакція в очікує до тих пір, за ка не зявиться можливість задовольнити її запит на блокування, а це може статися не раніше, ніж транзакціяА звільнить блокування

Примітка Вище було застосовано вираз не раніше, ніж, оскільки після звільнення блокування транзакцією А може бути задоволений інший запит на

блокування відповідного кортежу, але це буде не запит транзакції В, оскільки звільнення блокування можуть також очікувати інші транзакції Безумовно, система повинна забезпечити, щоб транзакція в не очікувала до безкінечності (така ситуація називаєтьсяактивним тупиком – Livelock, або виснаженням ресурсів – Starvation) Один з простих запобігання такої ситуації полягає в тому, щоб запити на блокування обслуговувалися в порядку простої черги (першим надійшов-перше обслуговується) 4 Блокування X звільняються по завершенні транзакції (COMMIT або ROLLBACK) Блокування S також зазвичай звільняються в цей час (принаймні, такого припущення ми будемо дотримуватися до розділу 168)

Описаний вище протокол називається строгим протоколом двухфазной блокування Він розглядається більш докладно в розділі 166 Зокрема, в цьому розділі зазначено, чому він отримав таку назву

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*