Намічений БЛОКИРОВКИ

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

Припустимо, що деяка транзакція т фактично запрошувати блокування X на деякої змінної відносини R Після отримання запиту від т система повинна

мати можливість визначити, чи мають вже небудь інші транзакції блокування на будь-якому кортежі R якщо так воно і є, то запит транзакції т в даний час не може бути задоволений Але може Чи система виявити подібний конфлікт Безумовно, небажано, щоб доводилося перевіряти кожен кортеж у змінній відносини R для визначення того, чи є який-небудь з них в даний час заблокованим якийсь інший транзакцією, або розглядати всі існуючі блокування, щоб дізнатися, чи не відноситься будь-яка з них до одного з кортежів у змінній відносини R Замість цього вводиться протокол наміченої блокування, згідно з яким жодної транзакції не дозволяється придбати блокування на кортежі перед тим, як буде спочатку придбана блокування (а, можливо, лише намічена таке блокування, як описано в наступному абзаці) на змінну відносини, яка її містить Тому в даному прикладі виявлення конфліктів стає порівняно простим завданням і зводиться до визначення того, чи має будь-яка транзакція конфліктуючу блокування на рівні змінної відносини

Отже, фактично викладене вище вже показує, що блокування X і S мають сенс не тільки для окремих кортежів, а й для цілих змінних відносини Згідно з рекомендаціями, викладеними в [1610], [1611], введемо три додаткових типу блокувань, званих наміченими блокуваннями, які також мають сенс для змінних відносини, але не для окремих кортежів: намічені розділяються (Intent Shared – IS) блокування,намічені виняткові (Intent Exclusive – IX) блокування і розділяються намічені виняткові (Shared Intent Exclusive – SIX) блокування Ці нові типи блокувань можуть бути визначені неформально, як описано нижче (Передбачається, що транзакція т зажадала блокування зазначеного типу на змінної відносини R для повноти включені також визначення типів X і S)

■&nbsp&nbsp&nbsp&nbsp Намічена розділюваний блокування (IS) У транзакції т намічається установка блокувань S на окремих кортежах змінної відношення R для того, щоб гарантувати постійність цих кортежів в процесі їх обробки

■&nbsp&nbsp&nbsp&nbsp Намічена виняткова блокування (IX) Те ж, що і IS, поряд з тим, що т може оновлювати окремі кортежі в R і тому встановлювати блокування X на цих кортежах

■&nbsp&nbsp&nbsp&nbsp Розділюваний блокування (S) Транзакція т може допускати паралельне примі ня інших транзакцій читання, але не паралельне застосування інших транзак ций поновлення у змінній відносини R (сама транзакція т Неоновлювані жодного з кортежів BR)

■&nbsp&nbsp&nbsp&nbsp Розділюваний намічена виняткова блокування (SIX) Являє собою поєднання S і IX це означає, що т допускає присутність паралельно виконуваних транзакцій читання, але не паралельно виконуваних транзакцій поновлення в R, але поряд з цим в транзакції т можуть оновлюватися окремі кортежі в R і тому повинні встановлюватися блокування X на ці кортежі

■&nbsp&nbsp&nbsp&nbsp Виняткова блокування (X) Транзакція т взагалі не допускає виконання будь-якого паралельного з нею доступу до R (в самій транзакції Т окремі кортежі R можуть оновлюватися або оновлюватися)

Формальні визначення цих пяти типів блокувань ілюструються розширеною версією матриці сумісності типів блокувань, яка вперше розглядалася в розділі 163 (рис 1613)

Рис 1613 Матриця сумісності, розширена з урахуванням намічених блокувань

Нижче наведена більш точне формулювання визначення протоколу наміченої блокування

1 Перш ніж будь-яка конкретна транзакція зможе придбати блокування S на зазначеному кортежі, вона повинна спочатку придбати блокування IS або більше сильну блокування (як описано нижче) на змінну відносини, що містить цей кортеж

2 Перш ніж будь-яка конкретна транзакція зможе придбати блокування X на зазначеному кортежі, вона повинна спочатку придбати блокування IX або більше сильну блокування (як описано нижче) на змінну відносини, що містить цей кортеж

(Але слід зазначити, що це – ще не повне визначення Див анотацію до [1610]) Термін сильна блокування, застосовуваний у наведеному вище визначенні протоколу, який повністю формулюється як відносно більш сильна блокування, можна пояснити наступним чином Розглянемо граф передування, наведений на рис 1614 Прийнято вважати, що блокування типу L2 сильніше (тобто знаходиться вище в цьому графі), ніж блокування типу L1 тоді і тільки тоді, коли за наявності позначення N (Конфлікт) в стовпці блокування L1 в матриці сумісності для заданої рядки є також позначення N в стовпці блокування L2 для тієї ж рядка (див рис 1613) Слід зазначити, що запит на блокування, оканчивающейся невдачею при використанні блокування певного типу, безумовно, також закінчиться невдачею при запиті блокування більш сильного типу (і з цього факту випливає, що завжди безпечно використовувати блокування такого типу, який є сильнішим порівняно зі строго необхідним) Заслуговує також на увагу те, що ні блокування S, ні блокування IX не є сильнішими в порівнянні з іншими

Рис 1614 Граф передування типів блокувань

Необхідно також вказати, що на практиці блокування змінних відносини, придбані за допомогою протоколу наміченої блокування, звичайно купуються неявно Наприклад, якщо мова йде про транзакції, передбачають тільки читання, то система цілком ймовірно повинна неявно набувати блокування IS на всіх змінних відносини, до яких отримують доступ ці транзакції А якщо мова йде про транзакції оновлення, то система замість цього повинна, мабуть, набувати блокування IX Але в системі, ймовірно, повинен бути передбачений явно заданий оператор LOCK певного типу для того, щоб була можливість купувати у транзакціях

блокування S, X або SIX на рівні змінної відносини, якщо вони будуть потрібні Зокрема, такий оператор підтримується в СУБД DB2 (тільки для блокувань S і X, а не для блокувань SIX)

На завершення цього розділу відзначимо, що в багатьох системах передбачена можливість ескалації блокувань Це засіб являє собою спробу досягти рівноваги між конфліктуючими вимогами підвищення ступеня розпаралелювання та зниження витрат на управління блокуваннями Основна його ідея полягає в тому, що після досягнення деякого заздалегідь заданого порогового значення система автоматично замінює колекцію блокувань з тонкою ступенем деталізації єдиною блокуванням з більш грубою деталізацією, наприклад, шляхом оцінки потужності безлічі окремих блокувань S рівня кортежу і перетворення в блокування S тієї блокування IS, яка встановлена ​​на змінної відносини, що містить окремих кортежі з блокуваннями S Складається враження, що цей метод досить добре проявляє себе на практиці [169]

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

*

*