БАЗИ ДАНИХ. МОВИ ЗАПИТІВ, УПРАВЛІННЯ ТРАНЗАКЦІЯМИ,

РОЗПОДІЛЕНА ОБРОБКА ДАНИХ

 

2.4 Впорядкування та відновлення транзакцій

 

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

Одне з очевидних рішень полягає у виконанні в кожний момент часу лише однієї транзакції – попередня транзакція обов’язково повинна бути зафіксована перш, ніж буде дозволено почати виконання наступної транзакції. Однак призначення багатокористувацьких СКБД полягає у забезпеченні максимального ступеня розпаралелення транзакцій користувачів, тому ті транзакції, які не впливають на роботу одна одної, можуть виконуватись одночасно. Виявлення таких транзакцій становить суть процесу  впорядкування транзакцій.

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

У послідовному графіку операції кожної з транзакцій виконуються строго послідовно і не можуть чергуватись з операціями, виконуваними в інших транзакціях. Тобто, за наявності двох транзакцій Т1 і Т2, спочатку має бути виконана транзакція Т1, а після її завершення Т2, або ж навпаки. Таким чином, при послідовному виконанні взаємовплив між транзакціями відбуватись не буде, оскільки в кожний момент часу виконується лише одна транзакція.  

У непослідовному графіку чергуються операції з деякого набору одночасно виконуваних транзакцій.

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

Розглядаючи умови впорядкування, важливо враховувати послідовність виконання операцій читання та запису даних:

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

-  Якщо дві транзакції зчитують або записують зовсім незалежні елементи даних, вони не будуть конфліктувати між собою і послідовність їх виконання не має значення.

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

 

Приклад 2.4. Розглянемо графік S1, наведений в стовпцях Варіанта А табл. 2.4. Він встановлює послідовність операцій, що виконуються паралельно в транзакціях Т7 і Т8. Оскільки операція запису даних рахунку bal_X в транзакції Т8 не конфліктує з наступною операцією читання даних рахунку bal_Y в транзакції Т7, можна замінити послідовність виконання цих операцій і отримати еквівалентний графік S2, наведений в стовпцях Варіанту Б цієї ж таблиці. Якщо змінити порядок виконання наступних не конфліктуючих між собою операцій, то можна отримати еквівалентний послідовний графік S3 (Варіант В табл. 2.4).

Графік S3 є послідовним, а оскільки графіки S1 і S2 є еквівалентними графіку S3, вони є впорядковуючими.

 

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

 

Таблиця 2.4 – Еквівалентні графіки: Варіант  А – непослідовний графік S1;

Варіант Б – непослідовний графік S2, еквівалентний графіку S1;

Варіант В – послідовний графік S3, еквівалентний графікам S1 і S2

Час

Транзакція Т7

Транзакція Т8

Варіант А

t1

begin_transaction

 

t2

read(bal_X)

 

t3

write(bal_X)

 

t4

 

begin_transaction

t5

 

read(bal_X)

t6

 

write(bal_X)

t7

read(bal_Y)

 

t8

write(bal_Y)

 

t9

commit

 

t10

 

read(bal_Y)

t11

 

write(bal_Y)

t12

 

commit

Варіант Б

t1

begin_transaction

 

t2

read(bal_X)

 

t3

write(bal_X)

 

t4

 

begin_transaction

t5

 

read(bal_X)

t6

read(bal_Y)

 

t7

 

write(bal_X)

t8

write(bal_Y)

 

t9

commit

 

t10

 

read(bal_Y)

t11

 

write(bal_Y)

t12

 

commit

Варіант В

t1

begin_transaction

 

t2

read(bal_X)

 

t3

write(bal_X)

 

t4

read(bal_Y)

 

t5

write(bal_Y)

 

t6

commit

 

t7

 

begin_transaction

t8

 

read(bal_X)

t9

 

write(bal_X)

t10

 

read(bal_Y)

t11

 

write(bal_Y)

t12

 

commit

 

Для графіка S граф передування виглядає як направлений граф G=(N, E), що складається з множини вершин N, множини направлених ребер Е і формується таким чином.

1. Створюється вершина, що відповідає кожній із транзакцій.

2. Створюються направлені ребра Ti -> Tj, якщо транзакція Tj  зчитує значення елемента, записаного транзакцією Ti.

3. Створюються направлені ребра Ti -> Tj, якщо транзакція Tj  записує значення в елемент даних після того, як він був зчитаний  транзакцією Ti.

4. Створюються направлені ребра Ti -> Tj, якщо транзакція Tj  записує значення в елемент даних після того, як він був записаний транзакцією Ti.

Якщо в графі передування, що відповідає графіку S, існує ребро Ti -> Tj, то в будь-якому послідовному графіку S, еквівалентному графіку S, транзакція Ti повинна передувати транзакції Tj. Якщо граф передування містить цикли, то відповідний йому графік не є конфліктно впрорядковуючим. 

Впорядковуючими називають такі графіки, які дозволяють зберегти узгодженість бази даних за умови, що жодна з транзакцій цього графіка не буде відмінена. Протилежний підхід дозволяє проаналізувати відновлюваність транзакцій, що входять у даний графік. У випадку відміни транзакції, властивість нерозривності вимагає, щоб були відмінені всі результати її виконання. Однак, якщо в деякому графіку S транзакція Tj використала елемент даних, записаний транзакцією Ti, і зафіксувала свої результати, то відповідно до властивості стійкості відміна транзакції Tне може активізувати відміну транзакції Tj (без запуска компенсуючої транзакції). Тому такий графік не володіє властивістю відновлюваності і є недопустимим.

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

 

 

попередня     ЗМІСТ    наступна

 

 

Пєтух А.М., Романюк О.В., Романюк О.Н.

ВНТУ 2016