43
1 Борчук Леонид Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы построения транзакционных систем высокой доступности

Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

  • Upload
    yandex

  • View
    164

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

1

Борчук Леонид

Базы данных: Атомарность транзакций, способы ведения

журналов транзакций и принципы построения транзакционных систем высокой доступности

Page 2: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

2

Зачем нужны транзакции

Отказ системы, вызванный отказом элемента, который не может быть заменен запасным из-за отсутствия последнего, считается системным

Избежать системных отказов невозможно

Транз кция (англ. transaction) — группа последовательных ааопераций, которая либо выполняется целиком, либо не выполняется вовсе

Транзакции

Page 3: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

3

Примеры системных отказов

Ошибочные элементы данных Разрушение носителя Катастрофа Сбой системы Программные ошибки – деление на ноль и т.д.

Транзакции

Page 4: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

4

Свойства транзакции

Atomicity — Атомарность

Consistency — Согласованность

Isolation — Изоляция

Durability — Долговечность

Транзакции

Page 5: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

5

Менеджер транзакций

Транзакции

Процессор запросов

Менеджер транзакций

Менеджер протоколирования

Менеджер буфера

Менеджер восстановления

данные

Менеджер транзакций

протокол

Page 6: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

6

Пример транзакции

Транзакции

Операция t A в памяти B в памяти A на диске B на диске

READ(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8

OUTPUT(A) 16 16 16 16 8

OUTPUT(B) 16 16 16 16 16

A:=A*2;B:=B*2;

READ(A,t); t:=t*2; WRITE(A,t);READ(B,t); t:=t*2; WRITE(B,t);

Page 7: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

7

Протоколирование

Обеспечивает атомарность транзакции;

Содержит записи действий транзакции;

Чередует записи нескольких транзакций;

Используется для воссоздания согласованного состояния в случае аварии;

Может вестись разными способами (redo, undo).

Транзакции

Page 8: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

8

Протоколирование в режиме undo

Регламентируют деятельность менеджера буферов и предусматривают выполнение действий при фиксации транзакции.

U1: Если транзакция T модифицирует элемент X базы данных, то запись обновления <T,X,v> должна быть занесена в протокол до сохранения нового значения элемента X на диске.

U2: При фиксации результатов транзакции T запись <COMMIT T> следует помещать в протокол после сбрасывания всех измененных значений элементов базы данных на диск, причем интервал между сохранением данных и записью <COMMIT T> должен быть минимально коротким.

Undo

Page 9: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

9

Правила

Порядок сохранения информации транзакции T в режиме undo

1. Записи протокола, свидетельствующие об изменениях, внесенных в содержимое элементов базы данных;

2. Новые значения элементов базы данных как таковых;

3. Запись <COMMIT T> протокола.

4. FLUSH LOG – команда форсирования записи блоков протокола менеджером на диск.

Undo

Page 10: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

10

Записи протокола

<START T> - выполнение транзакции T начато.

<COMMIT T> - транзакция T успешно завершена. Результаты всех операций модификации должны быть зафиксированы на диске. Менеджер протоколирования подтверждает этот факт.

<ABORT T> - транзакция отменена. Никакие изменения транзакции на диске не отображаются. Если результаты уже были на диске, то они аннулируются менеджером транзакций.

<T,X,v> - записи обновления. Транзакция T изменила прежнее содержимое v элемента X. Ответ на операцию WRITE, а не OUTPUT. Сохраняется только старое значение элемента X.

Undo

Page 11: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

11

Пример

.

Undo

Операция t A в памяти

B в памяти

A на диске

B на диске

Протокол

<START T>

READ(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8 <T,A,8>

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8 <T,B,8>

OUTPUT(A) 16 16 16 16 8

OUTPUT(B) 16 16 16 16 16

<COMMIT T>

FLUSH LOG

Page 12: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

12

Восстановление

.

Undo

Возможна ситуация, когда в результате сбоя некоторые изменения были зафиксированы на диске, в то время как другие – нет. Нарушается принцип атомарности.Ответственность за восстановление возлагается на менеджер восстановления.Менеджер восстановления сканирует журнал и разделяет все транзакции на: - завершенные (в журнале есть запись <COMMIT T>) – в

этом случае по правилу U2 все изменения уже записаны на диск.

- незавершенные (есть запись <START T>, но нет <COMMIT T>) – для восстановления используется правило U1

Page 13: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

13

Алгоритм восстановления

.

Undo

Протокол сканируется весь начиная от конца к началу.

Встречая запись вида <T,X,v>:

Если T является зафиксированной транзакцией, то никакие действия не предпринимаются;

В противном случае T – незавершенная транзакция. Элементу X должно быть возвращено старое значение v.

Page 14: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

14

Пример восстановления

.

Undo

Сбой произошел после шага 12.

Сбой произошел после операции 11 перед операцией 12.

Сбой произошел между операциями 10 и 11.

Сбой произошел после операции 8.

Сбой произошел до операции 8.

Page 15: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

15

Особенности

.

Undo

во время восстановления анализируется вся копия протокола;

размер протокола очень большой.

При этом: записи помеченные <COMMIT T> для

восстановления уже не нужны; в одно и то же время может быть несколько

активных транзакций — в общем случае одна из них может начинаться где угодно.

Page 16: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

16

Контрольная точка

.

Undo

Приостановить прием запросов на активацию новых транзакций.

Дождаться, пока все действующие транзакции не выполнят операции фиксации или прерывания транзакций.

Осуществить сброс протокола на диск командой FLUSH LOG.

Внести в протокол запись вида <CKPT> и выполнить его повторный сброс.

Возобновить прием транзакций.

Page 17: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

17

Контрольная точка

.

Undo

В результате:

Любая транзакция, приступившая к работе до введения контрольной точки, будет гарантированно завершена (U2).

В процессе восстановления необходимость в отмене операций такой транзакции не возникает.

Сканирование журнала можно начинать не с начала, а с записи <CKPT>.

Часть протокола до записи <CKPT> может быть удалена.

Page 18: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

18

Пример

.

Undo

<START T1>

<T1,A,5>

<START T2>

<T2,B,10>

<T2,C,15>

<T1,D,20>

<COMMIT T1>

<COMMIT T2>

<CKPT>

<START T3>

<T3,E,25>

<T3,F,30>

Page 19: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

19

Недостаток контрольной точки для протоколирования в режиме undo

.

Undo

приостановка функционирования системы до момента завершения всех активных транзакций;активная транзакция может длиться долго, для всех остальных система будет выглядеть зависшей.

Page 20: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

20

Динамическая контрольная точка

.

Undo

1. Внести в протокол запись вида <START CKPT (T1..Tk)>, где T1..Tk — активные транзакции; сбросить протокол на диск.2. Дождаться момента завершения или прерывания всех активных транзакций T1..Tk, не запрещая старта новых транзакций.3. По завершении работы всех транзакций T1..Tk сохранить в протоколе запись <END CKPT> и выполнить команду FLUSH LOG.

Page 21: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

21

Восстановление при динамической контрольной точке

.

Undo

Менеджер восстановления сканирует журнал от конца к началу с целью отыскать транзакции. Возможны 2 ситуации:

1. Если первой встречается запись вида <END CKPT>, то все незавершенные транзакции начались после последней записи <START CKPT (T1..Tk)>, так что восстановление можно начинать не с начала протокола, а с этой записи;

Page 22: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

22

Восстановление при динамической контрольной точке

.

Undo

2. Если первой встречается запись <START CKPT (T1..Tk)>, то отказ произошел в момент выполнения контрольной точки. Незавершенными могут быть только транзакции (T1..Tk). Восстановление можно начинать с момента возникновения самой ранней из этих транзакций. К сожалению, момент начала часто бывает далеко.

Page 23: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

23

Пример восстановления при динамической контрольной точке

.

Undo

<START T1>

<T1,A,5>

<START T2>

<T2,B,10>

<START CKPT (T1,T2)>

<T2,C,15>

<START T3>

<T1,D,20>

<COMMIT T1>

<T3,E,25>

<COMMIT T2>

<END CKPT>

<T3,F,30>

Page 24: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

24

Протоколирование в режиме redo

.

Redo

Недостатки undo: невозможность выполнения фиксации транзакции без предварительного сохранения всех измененных данных на диск. критично для коротких транзакций. операции ввода-вывода можно оптимизировать с использованием протоколирования в режиме redo

Page 25: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

25

Отличия redo и undo

.

Redo

1. В процессе восстановления данных с использованием undo устраняются изменения, внесенные незавершенными транзакциями , и игнорируются результаты завершенных транзакций. Если применяется протокол redo, игнорируются незавершенные транзакции, а итоги выполнения зафиксированных транзакций воспроизводятся.

2. В режиме протоколирования undo измененные элементы базы данных сохраняются на диске до момента сброса записи <COMMIT T>. В режиме redo запись <COMMIT T> должна появиться на диске прежде, чем будут сохранены измененные значения.

Page 26: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

26

Правила redo

.

Redo

R1: Прежде чем транзакция T сможет модифицировать элемент X базы данных на диске, необходимо внести в копию протокола на диске все записи, имеющие отношение к операции модификации X, включая запись обновления вида <T,X,v> и <COMMIT T>

Форма записи совпадает с undo

Page 27: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

27

Алгоритм записи redo

.

Redo

1. Записи обновления, отражающие изменения, которым должны подвергнуться элементы базы данных.

2. Запись <COMMIT T>.

3. Модифицированные значения элементов базы данных как таковые

Page 28: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

28

Пример

.

Redo

Операция t A в памяти B в памяти

A на диске

B на диске

Протокол

<START T>

READ(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8 <T,A,16>

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8 <T,B,16>

<COMMIT T>

FLUSH LOG

OUTPUT(A) 16 16 16 16 8

OUTPUT(B) 16 16 16 16 16

Page 29: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

29

Восстановление

Redo

Неизвестно, какие записи успели попасть на диск, так что для надежности нужно повторить все изменения.

1. Идентифицировать все зафиксированные транзакции.

2. Сканировать протокол от начала к концу. Встречая запись вида <T,X,v>:

a) игнорировать ее, если T является незавершенной транзакций;

b) сохранить на диске значение v элемента X, если транзакция T завершена.

3. Для каждой незафиксированной транзакции T сохранить в журнале запись <ABORT T> и выполнить команду FLUSH LOG

Page 30: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

30

Контрольная точка

Redo

Особенности: Данные на диск записываются после фиксации транзакции.Менеджер буфера должен отслеживать, какие из блоков буфера являются «грязными» - содержат зафиксированные данные, не сброшенные на диск

Page 31: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

31

Контрольная точка

Redo

1. Внести в протокол запись вида <START CKPT (T1,...,Tk)>, где T1,...,Tk — активные транзакции, после чего выполнить сброс протокола командой FLUSH LOG

2. Сохранить на диске «грязные» блоки данных транзакций, завершенных до начала контрольной точки

3. Сохранить в протоколе запись <END CKPT> и выполнить команду FLUSH LOG

Page 32: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

32

Пример

Redo

<START T1>

<T1,A,5>

<START T2>

<COMMIT T1>

<T2,B,10>

<START CKPT (T2)>

<T2,C,15>

<START T3>

<T3,D,20>

<END CKPT>

<COMMIT T2>

<COMMIT T3 >

Page 33: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

33

Восстановление

Redo

Менеджер восстановления сканирует журнал от конца к началу с целью отыскать транзакции. Возможны 2 ситуации:

1. Если первой встречается запись вида <END CKPT>, то все завершенные транзакции до записи <START CKPT (T1..Tk)> сохранены на диске. Но записи транзакций T1..Tk и стартовавших после контрольной точки на диск не попали. Следует начать восстановление с самой ранней записи <START Ti>.

Page 34: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

34

Восстановление

Redo

2. Если первой встречается запись <START CKPT (T1..Tk)>, то отказ произошел в момент выполнения контрольной точки. Нельзя гарантировать, что все транзакции, завершенные к моменту начала контрольной точки, попали на диск. Поэтому нужно переместиться к первой записи <END CKPT> и повторить действия п.1.

Page 35: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

35

Пример

Redo

<START T1>

<T1,A,5>

<START T2>

<COMMIT T1>

<T2,B,10>

<START CKPT (T2)>

<T2,C,15>

<START T3>

<T3,D,20>

<END CKPT>

<COMMIT T2>

<COMMIT T3 >

Page 36: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

36

Режим undo/redo

Undo/Redo

1. Режим undo требует, чтобы измененные данные сохранялись на диске непосредственно по завершению транзакции, что чревато увеличением количества дисковых операций.

2. Режим redo требует хранения модифицированных блоков данных в буфере до момента завершения транзакции. Это увеличивает требования к оперативной памяти.

3. Использование обоих режимов сопряжено с необходимостью удовлетворения противоречивых требований, касающихся проблемы управления буфером памяти в процессе ведения контрольной точки.

Page 37: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

37

Правило

Undo/Redo

UR: Прежде чем транзакция T сможет модифицировать элемент X базы данных на диске, необходимо внести в копию протокола на диске соответствующую запись обновления <T,X,v,w>

Запись <COMMIT T> допускается включать в протокол до или после записи блоков данных на диск.

Page 38: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

38

Пример

Undo/Redo

Операция t A в памяти B в памяти

A на диске

B на диске

Протокол

<START T>

READ(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8 <T,A,8,16>

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8 <T,B,8,16>

<COMMIT T>

FLUSH LOG

OUTPUT(A) 16 16 16 16 8

OUTPUT(B) 16 16 16 16 16

Page 39: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

39

Восстановление

Undo/Redo

1. Повторить операции всех зафиксированных транзакций в порядке от более ранних к более поздним

2. Отменить результаты всех незавершенных транзакций в обратном хронологическом порядке.

Обе группы действий одинаково важны, как и их порядок.

Page 40: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

40

Динамическая контрольная точка в режиме протоколирования Undo/Redo

Undo/Redo

1. Внести в протокол запись вида <START CKPT (T1,...,Tk)>, где (T1,...,Tk) — все активные транзакции, и сбросить протокол на диск командой FLUSH LOG.

2. Сохранить на диске информацию всех «грязных» буферов, независимо от того, зафиксированы они или нет.

3. Сохранить в протоколе запись <END CKPT> и выполнить команду FLUSH LOG

Page 41: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

41

Пример

Undo/Redo

<START T1>

<T1,A, 4, 5>

<START T2>

<T2,B,9,10>

<COMMIT T1>

<START CKPT (T2)>

<T2,C,14,15>

<START T3>

<T3,D,19,20>

<END CKPT>

<COMMIT T2>

<COMMIT T3 >

Page 42: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

42

Резервное копирование

Undo/Redo

Оперативная память

Диск Backup

Цель: защита от отказа дискового устройства

Резервная копия – база данных в состоянии в момент архивирования

Page 43: Леонид Борчук - Базы данных: Атомарность транзакций, способы ведения журналов транзакций и принципы

43

Резервное копирование

Undo/Redo

Чтобы воссоздать свежее состояние БД, после ее восстановления нужно воспользоваться протоколом, если он доступен.

Чтобы защититься от потери протокола, его копию следует сохранять в том же месте, где хранится архив .

Виды резервной копии:Полный дамп, т.е. исчерпывающая копия БДИнкрементальный дамп – копии тех элементов, что изменились с прошлого резервного копирования

Процесс восстановления напоминает восстановление в режиме “redo”

Недостаток: необходимо останавливать БД для создания резервной копии