ЗАСОБИ блокування МОВИ SQL

У стандарті SQL не передбачено будь-явно задані засоби блокування фактично в ньому взагалі не згадується блокування як таковая12 Але цей стандарт вимагає, щоб в його реалізації були передбачені звичайні гарантії, що стосуються взаємного втручання (чи, радше, його відсутності) між одночасно виконуваними транзакціями Що ще більш важливо, в цьому стандарті потрібно, щоб оновлення, внесені будь-якої конкретної транзакцією Т1, що не ставали б доступними для будь-якої іншої транзакції Т2 доти (або тільки після того), поки не відбудеться фіксація транзакції Т1

Примітка Для дотримання викладених вище вимог необхідно, щоб всі транзакції виконувалися на рівні ізоляції READ COMMITTED, REPEATABLE READ або SERIALIZABLE (див наступний абзац) До транзакціях, виконуваних на рівні

12 Це упущення зроблено навмисно – ідея полягає в тому, що розробники системи повинні бути вправі використовувати будь механізми управління паралельним виконанням, за умови, що ці механізми дозволяють реалізувати бажані функціональні можливості

Глава 16 Паралельність631

READ UNCOMMITTED, предявляються особливі вимоги, оскільки їм, по-перше, дозволено виконувати брудне читання, але, по-друге, вони обовязково повинні ставитися до типу READ ONLY (оскільки якби було дозволено застосовувати в цьому випадку транзакції типу READ WRITE, то восстанавливаемость більше не можна було б гарантувати) Тепер нагадаємо, що рівні ізольованості SQL визначаються в операторі START TRANSACTION (як було сказано в главі 15) Для цього передбачені чотири ВОЗМОЖНОСТІ13-SERIALIZABLE, REPEATABLE READ, READ COMMITTED І READ UNCOMMITTEDЗа замовчуванням застосовується значення SERIALIZABLE якщо визначена будь-яка з трьох інших можливостей, то в конкретній реалізації дозволено призначати деякий вищий рівень, де поняття більш

високий визначено в термінах впорядкування SERIALIZABLE> REPEATABLE READ> READ COMMITTED> READ UNCOMMITTED

Якщо всі транзакції виконуються на рівні ізоляції SERIALIZABLE (застосовується за умовчанням), то гарантована упорядочіваемость процедури чергується виконання будь-якого безлічі паралельних транзакцій Але якщо будь-яка транзакція виконується на більш низькому рівні ізоляції, то порушення упорядочіваемості може статися з найрізноманітніших причин У стандарті визначено три види порушень: брудне читання, неповторяющимися читання і фантоми (перші два з них описані в розділі 162, а третій – у розділі 168), а різні рівні ізоляції визначені в термінах порушень, які в них допускаются4 Підсумкові відомості про ці порушення наведено в табл 161 (тут Y позначає, що порушення може виникнути, a N – ні)

Таблиця 161 Рівні ізоляції SQL

На завершення цього розділу нагадаємо, що ключове слово REPEATABLE READ, яке визначено в стандарті SQL, і опція повторюваного читання (Repeatable Read – RR), визначена в СУБД DB2, не є однаковими Насправді, опція RR В СУБД DB2 аналогічна ключовим словом SERIALIZABLE цього стандарту

166&nbsp&nbsp&nbsp РЕЗЮМЕ

У цьому розділі були описані способи управління паралельністю Спочатку розглядалися три проблеми, що виникають через відсутність такого управління при чергується виконанні паралельних транзакцій, а саме:проблема втраченого поновлення,

13 У даному випадку ключове слово SERIALIZABLE не зовсім підходить, оскільки передбачається, що впорядковує повинні бути графіки, а не транзакції Більш підходящим терміном був би просто TWO PHASE, який означає, що транзакція підпорядковується (або буде змушена підкорятися) протоколу двофазної блокування

14 Однак див [162] і [1614]

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

Найбільш поширеним методом вирішення вказаних проблем є використання механізму блокування Існує два основних типи блокувань: Колективна (блокування S) і виняткова (Блокування X) Якщо транзакція встановлює блокування S для деякого обєкта, то інші транзакції також зможуть встановити блокування S для цього ж обєкта, проте встановити для нього блокування X їм не вдасться Якщо одна транзакція встановлює блокування X для деякого обєкта, то ніяка інша транзакція не зможе встановити для цього обєкта ніякий інший блокування Спеціальний протокол використання цих блокувань дозволяє усунути згадану вище проблему втраченого оновлення та інші можливі проблеми У відповідності з даним протоколом, блокування S встановлюється для всіх зчитувальних обєктів, а блокування X – для всіх оновлюваних обєктів, причому всі встановлені блокування зберігаються до закінчення виконання транзакції За допомогою цього протоколу можна забезпечити упорядочіваемость графіка виконання транзакцій

Описаний протокол є строгою формою протоколу двофазної блокування

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

У загальному випадку не можна гарантувати безпеку виконання набору транзакцій,

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

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

сильніших, ніж ті, які встановлюються системою неявно (хоча в стандарті SQL

такий механізм не передбачений)

Потім у цій главі під новим кутом зору були проаналізовані так звані властивості ACID транзакцій і зроблено висновок, що, всупереч широко поширеній думці, ці властивості є не такими вже безперечними Нарешті, в цьому розділі були коротко описані засоби управління паралельністю, передбачені в мові SQL У стандарті мови SQL кошти явною установки блокування не передбачені взагалі, проте в ньому підтримуються різні рівні ізоляції (SERIALIZABLE,

REPEATABLE   READ, READ   COMMITTED, READ   UNCOMMITTED),

які в СУБД зазвичай

реалізуються неявно заданими засобами блокування

Джерело: Дейт К Дж, Введення в системи баз даних, 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>

*

*