Леонид Борчук - Базы данных: Атомарность транзакций,...

Post on 19-Jun-2015

164 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

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

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

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

2

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

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

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

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

Транзакции

3

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

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

Транзакции

4

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

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

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

Isolation — Изоляция

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

Транзакции

5

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

Транзакции

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

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

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

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

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

данные

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

протокол

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);

7

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

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

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

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

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

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

Транзакции

8

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

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

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

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

Undo

9

Правила

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

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

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

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

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

Undo

10

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

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

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

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

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

Undo

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

12

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

.

Undo

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

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

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

13

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

.

Undo

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

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

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

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

14

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

.

Undo

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

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

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

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

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

15

Особенности

.

Undo

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

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

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

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

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

16

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

.

Undo

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

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

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

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

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

17

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

.

Undo

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

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

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

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

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

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>

19

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

.

Undo

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

20

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

.

Undo

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

21

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

.

Undo

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

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

22

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

.

Undo

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

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>

24

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

.

Redo

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

25

Отличия redo и undo

.

Redo

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

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

26

Правила redo

.

Redo

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

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

27

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

.

Redo

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

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

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

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

29

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

Redo

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

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

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

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

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

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

30

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

Redo

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

31

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

Redo

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

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

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

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 >

33

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

Redo

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

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

34

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

Redo

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

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 >

36

Режим undo/redo

Undo/Redo

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

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

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

37

Правило

Undo/Redo

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

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

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

39

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

Undo/Redo

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

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

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

40

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

Undo/Redo

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

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

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

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 >

42

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

Undo/Redo

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

Диск Backup

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

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

43

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

Undo/Redo

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

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

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

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

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

top related