Керування трансакціями. Відновлення

Содержание

Слайд 2

Трансакції

Трансакція – логічна одиниця роботи БД

Трансакції Трансакція – логічна одиниця роботи БД

Слайд 3

Властивості трансакцій (ACID)

Атомарність (Atomicity). Трансакції атомарні – виконується все або нічого.
Узгодженість (Consistency).

Властивості трансакцій (ACID) Атомарність (Atomicity). Трансакції атомарні – виконується все або нічого.
Трансакції переводять базу даних з одного узгодженого стану в інший узгоджений стан.
Ізольованість (Isolation). Транзакції ізольовані одна від одної.
Довговічність (Durability). Якщо трансакція успішно закінчена, виконані нею дії оновлень даних зберігаються в БД постійно, навіть якщо в наступний момент відбудеться збій.

Слайд 4

Режими відмов

Події Бажані
Небажані Очікувані
Неочікувані

Режими відмов Події Бажані Небажані Очікувані Неочікувані

Слайд 5

Модель системи

процесор
пам’ять диск

Модель системи процесор пам’ять диск

Слайд 6

Бажані події: дивись документацію…
Небажані очікувані події:
Системний збій
Втрата вмісту пам’яті
Зависання -> перезавантаження
Пошкодження носія
Небажані

Бажані події: дивись документацію… Небажані очікувані події: Системний збій Втрата вмісту пам’яті
неочікувані події
Все інше!

Слайд 7

Режими відмов

Помилкові елементи даних
Пошкодження носія
Катастрофа
Збій системи

Режими відмов Помилкові елементи даних Пошкодження носія Катастрофа Збій системи

Слайд 8

Менеджер трансакцій

Відповідальність за коректну поведінку трансакцій покладається на менеджер трансакцій.

Менеджер трансакцій Відповідальність за коректну поведінку трансакцій покладається на менеджер трансакцій.

Слайд 9

Менеджер трансакцій

Менеджер трансакцій

Слайд 10

Базові операції трансакцій

В процесі виконання трансакція має справу з трьома адресними просторами:
простір

Базові операції трансакцій В процесі виконання трансакція має справу з трьома адресними
дискових блоків, що містять елементи даних БД;
простір віртуальної або оперативної пам’яті, що керується менеджером буферів;
власний локальний адресний простір трансакції.

Слайд 11

Базові операції трансакцій

Input (X): дисковий блок, що містить значення X копіюється в

Базові операції трансакцій Input (X): дисковий блок, що містить значення X копіюється
буфер оперативної пам’яті.
Output (X): копіювати блок з елементом даних X на диск
Read (x,t): копіювати елемент X в локальну змінну t трансакції
Write (x,t): копіювати X значення локальної змінної t в буфер пам’яті, що відповідає елементу X бази даних

Слайд 12

Ключова проблема

Незакінчені трансакції
Наприклад Constraint: A=B
T1: A ← A × 2
B ←

Ключова проблема Незакінчені трансакції Наприклад Constraint: A=B T1: A ← A ×
B × 2

Слайд 13

T1: Read (A,t); t ← t×2
Write (A,t);
Read (B,t); t ← t×2
Write (B,t);
Output (A);
Output

T1: Read (A,t); t ← t×2 Write (A,t); Read (B,t); t ←
(B);

A: 8
B: 8

A: 8
B: 8

пам’ять

диск

Слайд 14

Вирішення проблеми

Потрібна атомарність
виконати всі дії трансакції або не виконати жодної

Вирішення проблеми Потрібна атомарність виконати всі дії трансакції або не виконати жодної

Слайд 15

Рішення – протоколювання

Протокол, чи журнал – це послідовність так званих записів протоколу,

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

Слайд 16

Відновлення з використання протоколу

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

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

Слайд 17

T1: Read (A,t); t ← t×2 A=B
Write (A,t);
Read (B,t); t ← t×2
Write (B,t);
Output

T1: Read (A,t); t ← t×2 A=B Write (A,t); Read (B,t); t
(A);
Output (B);

A:8
B:8

A:8
B:8

memory

disk

log

Undo logging



Слайд 18

“Ускладнення”

Журнал пишеться спочатку в пам’ять
Не пишеться на диск при кожній дії memory
DB
Log

A: 8

“Ускладнення” Журнал пишеться спочатку в пам’ять Не пишеться на диск при кожній
16
B: 8 16
Log:



A: 8
B: 8

Слайд 19

“Ускладнення”

Журнал пишеться спочатку в пам’ять
Не пишеться на диск при кожній дії memory
DB
Log

A:

“Ускладнення” Журнал пишеться спочатку в пам’ять Не пишеться на диск при кожній
8 16
B: 8 16
Log:




A: 8
B: 8



...

Слайд 20

Правила протоколювання в режимі Undo

Для кожної дії створювати запис журналу, що містить

Правила протоколювання в режимі Undo Для кожної дії створювати запис журналу, що
старе значення елементу даних
U1 Якщо трансакція Т змінює елемент x, запис журналу виду повинен бути занесений в протокол до збереження нового значення на диску (write ahead logging:WAL)
U2 При фіксації результатів трансакції Т запис слід заносити в протокол тільки після «скидання» всіх змінених елементів БД на диск, причому інтервал між дисковими операціями і записом повинен бути як найменшим.

Слайд 21

Відновлення: протокол Undo

Перша задача менеджера відновлення полягає в розподілі всіх трансакцій, згаданих

Відновлення: протокол Undo Перша задача менеджера відновлення полягає в розподілі всіх трансакцій,
в журналі, по двом категоріям – зафіксовані й незафіксовані.
Менеджер відновлення повинен здійснювати сканування журналу, починаючи з кінця і рухатись до початку.

Слайд 22

Відновлення: протокол Undo

Для кожної Ti із записом в журналі:
- If

Відновлення: протокол Undo Для кожної Ti із записом в журналі: - If
or in log, do nothing - Else For all in log:
write (X, v)
output (X )
Write to log

Слайд 23

Відновлення: протокол Undo

(1) Дано S = множина транзакцій в журналі з

Відновлення: протокол Undo (1) Дано S = множина транзакцій в журналі з
start>, але без
(або ), тобто незакінчені
(2) Для кожної в журналі,
в зворотному порядку (останні → ранні) виконати:
- if Ti ∈ S then - write (X, v)
- output (X)
(3) Для кожної Ti ∈ S виконати
- записати в журнал

Слайд 24

Питання

Чи можна зробити запис (крок 3) в будь-якій послідовності?
Наприклад: T1

Питання Чи можна зробити запис (крок 3) в будь-якій послідовності? Наприклад: T1
і T2 обидві пишуть A
T1 виконується перед T2
T1 і T2 обидві rolled-back
записаний, а - ні

T1 write A

T2 write A

time/log

Слайд 25

Питання

Що буде коли відбудеться збій під час виконання відновлення?

Питання Що буде коли відбудеться збій під час виконання відновлення?

Слайд 26

Введення контрольних точок

Для введення контрольної точки системі потрібно:
Призупинити прийом запитів на активізацію

Введення контрольних точок Для введення контрольної точки системі потрібно: Призупинити прийом запитів
нових трансакцій.
Дочекатися, поки всі діючі трансакції не виконають операції фіксації чи переривання і не занесуть в журнал записи або .
Здійснити «скидання» журналу на диск командою flush log.
«Скинути» всі буфери на диск
Занести в протокол запис виду .
Відновити прийом запитів.
Недоліки?

Слайд 27

Динамічне введення контрольних точок

Внести в протокол запис і через

Динамічне введення контрольних точок Внести в протокол запис і через команду flush
команду flush log «скинути» протокол на диск; T1…Tn - всі активні трансакції на момент введення контрольної точки
Дочекатися моменту фіксації або переривання всіх трансакцій з T1…Tn не забороняючи можливості старту нових трансакцій.
При завершенні всіх трансакцій з T1…Tn зберегти в протоколі запис і виконати flush log.

Слайд 28

Динамічні контрольні точки

L
O
G
чекаємо
завершення
трансакцій

Start-ckpt
active TR:
Ti,T2,...

end
ckpt

...

...

...

Динамічні контрольні точки L O G чекаємо завершення трансакцій Start-ckpt active TR:

Слайд 29

Відновлення з використанням контрольних точок

Якщо спочатку менеджеру відновлення зустрівся запис виду

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

Слайд 30

Відновлення з використанням контрольних точок

Якщо першим зустрівся запис ,

Відновлення з використанням контрольних точок Якщо першим зустрівся запис , значить, збій
значить, збій відбувся в період виконання процедури введення контрольної точки. Незавершеними будуть тільки ті трансакції із числа T1…Tn , які не встигли здійснити фіксацію своїх результатів до виникнення ситуації відмови.

Слайд 32

Протоколювання в режимі REDO

Для кожної дії створювати запис журналу, що містить нове

Протоколювання в режимі REDO Для кожної дії створювати запис журналу, що містить
значення елементу даних
R1 Перш ніж трансакція змінить X на дискові, необхідно внести в протокол всі записи оновлення X, включаючи запис оновлення і запис фіксації

Слайд 33

Протоколювання в режимі REDO

T1: Read(A,t); t t×2; Write (A,t);
Read(B,t); t t×2;

Протоколювання в режимі REDO T1: Read(A,t); t t×2; Write (A,t); Read(B,t); t
Write (B,t);
Output(A); Output(B)

A: 8
B: 8
A: 8
B: 8

memory

DB

LOG

Слайд 34

Відновлення: протокол REDO

Ідентифікувати всі завершені трансакції
Сканувати протокол в напрямку від початку до

Відновлення: протокол REDO Ідентифікувати всі завершені трансакції Сканувати протокол в напрямку від
кінця. Зустрівши запис :
ігнорувати його, якщо Т – незавершена
зберегти на дискові значення v для елемента x, якщо трансакція Т завершена.
Для кожної незавершеної трансакції Т зберегти в журналі запис
Виконати команду flush log

Слайд 35

Відновлення: протокол REDO

Для кожної Ti з в журналі:
Для всіх

Відновлення: протокол REDO Для кожної Ti з в журналі: Для всіх в журналі: Write(X, v) Output(X)
v> в журналі:
Write(X, v)
Output(X)

Слайд 36

Відновлення: протокол REDO

Дано S = множина трансакцій з в журналі
Для кожної

Відновлення: протокол REDO Дано S = множина трансакцій з в журналі Для
в журналі, в порядку появи (ранні →останні) виконати:
- if Ti ∈ S then Write(X, v)
Output(X)

Слайд 37

Введення контрольних точок

Внести в журнал запис виду , де -

Введення контрольних точок Внести в журнал запис виду , де - T1…Tn
T1…Tn всі активні (незафіксовані) трансакції і виконати «скидання» протоколу на диск командою flush log.
Зберегти на дискові значення всіх елементів бази даних, змінених в буферах пам’яті, але не записаних на диск тими трансакціями, які на момент включення в журнал запису виявилися завершеними.
Зберегти в протоколі запис і виконати flush log

Слайд 39

Відновлення: протокол REDO

Якщо спочатку менеджеру відновлення зустрівся запис виду , це

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

Слайд 40

Відновлення: протокол REDO

Але будь-яка трансакція зі списку T1…Tn, можливо ще не встигла

Відновлення: протокол REDO Але будь-яка трансакція зі списку T1…Tn, можливо ще не
записати дані на диск, навіть якщо в журналі є запис . Тому для відновлення потрібно розглянути трансакції зі списку T1…Tn або ті, які стартували після процедури введення контрольної точки.

Слайд 41

Відновлення: протокол REDO

Якщо першим зустрівся . В такому випадку неможливо

Відновлення: протокол REDO Якщо першим зустрівся . В такому випадку неможливо гарантувати,
гарантувати, що всі трансакції, завершені на момент внесення , змогли зберегти свої оновлення даних на диск. Тому треба перейти до попереднього , знайти відповідний йому запис , а потім повторити збереження результатів оновлень всіх зафіксованих трансакцій Sj зі або тих, які стартували після внесення а протокол

Слайд 42

Протоколювання: undo/redo

Режим undo вимагає, щоб змінені дані зберігалися на диску безпосередньо по

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

Слайд 43

Протоколювання: undo/redo

Перш ніж трансакція Т зможе модифікувати елемент Х бази даних на

Протоколювання: undo/redo Перш ніж трансакція Т зможе модифікувати елемент Х бази даних
диску, необхідно записати в журнал на диску запис оновлення

Слайд 44

Відновлення: undo/redo

Повторити операції всіх зафіксованих трансакцій в порядку від ранніх до останніх.
Відмінити

Відновлення: undo/redo Повторити операції всіх зафіксованих трансакцій в порядку від ранніх до
результати всіх незавершених трансакцій в зворотному порядку.

Слайд 45

Введення контрольних точок

Внести в протокол запис виду і виконати

Введення контрольних точок Внести в протокол запис виду і виконати “скидання” протоколу
“скидання” протоколу на диск командою flush log.
Зберегти на диску інформацію всіх буферів, що містять “бруд”, тобто змінені значення, не “скинуті” на диск.
Зберегти в журналі запис і виконати команду flush log
Имя файла: Керування-трансакціями.-Відновлення.pptx
Количество просмотров: 15
Количество скачиваний: 0