Upload
yandex
View
164
Download
4
Embed Size (px)
Citation preview
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”
Недостаток: необходимо останавливать БД для создания резервной копии