- •1. Серіалізація транзакцій. Розв'язання проблем транзакцій за допомогою блокування
- •1.1. Блокування. Синхронізаційні захоплення
- •1.2. Навмисні блокування (гранульовані синхронізаційні захоплення)
- •1.3. Предикатні блокування (предикатні синхронізаційні захоплення)
- •1.4. Виникнення і руйнування тупиків
- •2. Метод часових міток
- •3. Механізм виділення версій даних
- •5.1. Рівні ізоляції
- •4. Теорема Есварана про серіалізованість
- •5. Реалізація ізольованості транзакцій засобами sql
- •5.2. Синтаксис операторів sql, що визначають рівні ізоляції
4. Теорема Есварана про серіалізованість
Концепція здатності до упорядкування була вперше запропонована Есвараном.
У цій роботі був запропонований протокол двофазного блокування:
Перед виконання яких-небудь операцій з деяким об'єктом, транзакція повинна заблокувати цей об'єкт.
Після зняття блокування, транзакція не повинна накладати ніяких інших блокувань.
Транзакції, використовувані в цьому протоколі, не різняться по типах і вважаються монопольними. Описані вище протоколи доступу до даних з використанням S- і X-блокувань і протокол навмисних блокувань є модифікаціями протоколу двофазного блокування для випадку, коли блокування мають різні типи.
Есвараном сформульована наступна теорема:
Теорема Есварана. Якщо всі транзакції в суміші підкоряються протоколу двофазного блокування, то для всіх графіків запуску, що чергуються, існує можливість упорядкування.
Протокол називається двухфазным, тому що він характеризується двома фазами:
1 фаза - наростання блокувань. Під час цієї фази накладаються блокування, і провадиться робота з заблокованими об'єктами.
2 фаза - зняття блокувань. Під час цієї фази блокування тільки знімаються. Робота з раніше заблокованими даними може продовжуватися.
5. Реалізація ізольованості транзакцій засобами sql
5.1. Рівні ізоляції
Стандарт SQL не передбачає поняття блокувань для реалізації серіалізованості суміші транзакцій. Замість цього вводиться поняття рівнів ізоляції. Цей підхід забезпечує необхідні вимоги до ізольованості транзакцій, залишаючи можливість виробникам різних СУБД реалізовувати ці вимоги своїми способами (зокрема, з використанням блокувань чи виділенням версій даних).
Стандарт SQL передбачає 4 рівні ізоляції:
READ UNCOMMITTED - рівень незавершеного зчитування.
READ COMMITTED - рівень завершеного зчитування.
REPEATABLE READ - рівень повторюваного зчитування.
SERIALIZABLE - рівень здатності до упорядкування.
Якщо усі транзакції виконуються на рівні здатності до упорядкування (прийнятому за замовчуванням), то виконання, що чергується, будь-якої множини паралельних транзакцій може бути упорядковано. Якщо деякі транзакції виконуються на більш низьких рівнях, то є безліч способів порушити здатність до упорядкування. У стандарті SQL виділені три особливих випадки порушення здатності до упорядкування, фактично саме ті, котрі були описані вище як проблеми паралелізму:
Неакуратне зчитування ("Брудне" читання, незафіксована залежність).
Неповторювальне зчитування (Окремий випадок несумісного аналізу).
Фантоми (Фіктивні елементи - окремий випадок несумісного аналізу).
Утрата результатів відновлення стандартом SQL не допускається, тобто на найнижчому рівні ізольованості транзакції повинні працювати так, щоб не допустити втрати результатів відновлення.
Різні рівні ізоляції визначаються по можливості чи виключенню цих особливих випадків порушення здатності до упорядкування. Ці визначення описуються наступною таблицею:
Рівень ізоляції |
Неакуратне зчитування |
Неповторювальне зчитування |
Фантоми |
READ UNCOMMITTED |
Так |
Так |
Так |
READ COMMITTED |
Ні |
Так |
Так |
REPEATABLE READ |
Ні |
Ні |
Так |
SERIALIZABLE |
Ні |
Ні |
Ні |
Таблиця 4 Рівні ізоляції стандарту SQL
