Слайд 2
Принципы построения БД
Тема 8
Часть 2
Восстановление при сбоях Гл.17
Управление
параллельным доступом Гл.18
Обработка транзакций Гл.19
Слайд 3
Принципы построения БД
Тема 8
Целостность и корректность данных
Хотели бы
вы, чтобы данные были правильными постоянно
EMP
Name
White
Green
Gray
Age
52
3421
1
Слайд 4
Принципы построения БД
Тема 8
Ограничения целостности
Условия, которым долны удовлетворять
данные
Примеры:
- x является ключом отношения R
- выполняется функциональная зависимость
x → y для всех кортежей из R
- Domain(x) = {Red, Blue, Green}
- никто из служащих не должен иметь зарплату, превышающую среднюю более чем в 2 раза
Слайд 5
Принципы построения БД
Тема 8
Определения:
Согласованное состояние: состояние, в котором
выполняются все ограничения целостности
Согласованная БД: База данных в
согласованном состоянии
Слайд 6
Принципы построения БД
Тема 8
Ограничения целостности (как мы их
знаем ) могут не обеспечивать «полную корректность»
Пример 1
Условия на транзакции
Когда зарплата обновляется,
новая зарплата > старая зарплата
Кода удаляется запись счета в банке,
остаток = 0
можно имитировать простым ограничением
Слайд 7
Принципы построения БД
Тема 8
Пример 2 База
данных должна отражать реальный мир
БД
Реальность
Ограничения целостности (как мы их
знаем ) могут не обеспечивать «полную корректность»
Слайд 8
Принципы построения БД
Тема 8
Наблюдение: БД не может быть
согласована постоянно из-за необходимости изменений!
Пример: a1 + a2 +….
an = Итог (ограничение)
Добавить $100 к a2: a2 ← a2 + 100
Итог ← Итог + 100
а2
Итог
Слайд 9
Принципы построения БД
Тема 8
Транзакция: совокупность действий, сохраняющая согласованность
БД
Согласов.БД
Согласов.БД
T
Важное предположение
Если T начинается в согласованном состоянии
и выполняется изолированно (т.е.без конкуренции с другими действиями над БД), то после ее завершения БД остается в согласованном состоянии
Слайд 10
Принципы построения БД
Тема 8
Как могут быть нарушены ограничения
целостности?
Ошибка в алгоритме транзакции
Ошибка в СУБД
Сбой оборудования, например, сбой
диска, в результате которогь изменяется остато ра счете
Общие данные
T1: увеличить на 10% зарплату программистам из списка
T2: изменить программистов из списка на системных аналитиков
Слайд 11
Принципы построения БД
Тема 8
Как можно предотвратить/исправить нарушения?
Глава 17:
только при сбоях системы
Chapter 18: только из-за общих данных
Chapter
19: при сбоях системы и общих данных
Не будем рассматривать:
Как писать правильные транзакции
Как писать правильные СУБД
Проверку и восстановление ограничений
Рассматриваемые здесь решения не знают обограничениях
Слайд 12
Принципы построения БД
Тема 8
Восстановление при сбоях
Первое, что нужно
сделать – описать модель сбоя
События Желательные
Нежелательные
Ожидаемые
Неожидаемые
Процессор
Память Диск
CPU
M
D
Слайд 13
Принципы построения БД
Тема 8
Желательные события: то, что программа
должна делать в соответствии с ее руководством.
Нежелательные ожидаемые события
- зависание или сбой системы,
- потеря памяти,
- остановка процессора, сброс
Нежелательные неожидаемые события
- все остальное ( необъянимая потеря данных, землетрясение, нападение террористов)
Слайд 14
Принципы построения БД
Тема 8
Является ли эта модель приемлемой?
Подход:
Добавить низко уровневые проверки + избыточность для увеличения вероятности,
что система выживет при сбое
Например,
поддержка точной копии диска или дискового массива
Проверка четности при обращении к памяти
Проверки процессора
Слайд 15
Принципы построения БД
Тема 8
Второй важный момент после выбора
модели:
Иерархия памяти
Операции
Input (x): блок с элементом БД x
→ память
Output (x): блок с элементом БД x → диск
Read (x,t): если нужно выполнить input(x), копировать в переменную t ← значение x из блока
Write (x,t): если нужно выполнить input(x),
значение x в блоке ← t
Память Диск
x
x
Слайд 16
Принципы построения БД
Тема 8
Ключевая проблема Незавершенная транзакция
Пример
Ограничение: A=B
T1: A ← A × 2
B ← B × 2
Память
Диск
T1: Read (A,t); t ← t×2
Write (A,t);
Read (B,t); t ← t×2
Write (B,t);
Output (A);
Output (B); - сбой
A: 8
B: 8
A: 8
B: 8
16
Необходима (А)томарность (неделимость) транзакции – выполнение либо всех действий транзакции либо никаких.
Слайд 17
Принципы построения БД
Тема 8
Файл протокола (журнал регистрации)
Протокол –
последовательность записей о том что происходит с каждой транзакцией.
Эти
последовательности для разных транзакций могут перекрываться.
При сбое системы происходит просмотр протокола, незавершенные по протоколу транзакции должны быть либо повторены, либо полностью отменены (каждое действие, отмеченное в протоколе).
Типы записей: START, COMMIT, ABORT
Слайд 18
Принципы построения БД
Тема 8
T1: Read (A,t); t ← t×2
A=B
Write (A,t);
Read (B,t); t ←
t×2
Write (B,t);
Output (A);
Output (B);
A:8
B:8
A:8
B:8
память
диск
протокол
Одно из решений - протокол-возврата
(немедленная модификация)
Слайд 19
Принципы построения БД
Тема 8
Одно “осложнение”
Протокол сначала заносится в
память, а потом уже на диск (для эффективной буферизации)
Не
записывается на диск при каждом действии память
БД
Протокол
A: 8 16
B: 8 16
Log:
A: 8
B: 8
Слайд 20
Принципы построения БД
Тема 8
Протокол сначала заносится в память,
а потом уже на диск (для эффективной буферизации)
Не записывается
на диск при каждом действии память
БД
Протокол
A: 8 16
B: 8 16
Log:
A: 8
B: 8
...
Слайд 21
Принципы построения БД
Тема 8
Правила протокола-возврата
(Undo logging rules)
(1) Для
каждого действия создать запись в протоколе-возврата (содержащую старое значение)
(2)
Перед изменением x на диске, запись, содержащая старое значение x должна быть уже записана в файл протокола-возврата
(3) Перед записью <Соmmit T> в файл протокола все операции записи действий транзакции на диск должны быть уже завершены
Слайд 22
Принципы построения БД
Тема 8
Правила восстановления:
протокол-возврата
Для каждой
транзакции Ti, для которой в протоколе имеется запись
Ti >:
Если для нее в ротоколе имеется также запись
или , то ничего не делать
Иначе для всех записей в протоколе: write (X, v)
output (X )
записать в протокол
Слайд 23
Принципы построения БД
Тема 8
Правила восстановления: протокол-возврата
Пусть S
= множество транзакций с записями в протоколе,
но без записей
(или )
Для каждой записи в протоколе в обратном порядке (более поздние обрабатываются раньше) выполнить:
- если Ti ∈ S то - write (X, v)
- output (X)
Для каждой транзакции Ti ∈ S записать в протокол
Что еcли произойдет сбой во время восстановления?
Нет проблем! Восстановления с использованием протокола возврата – идемпотентно (т.е.X * X = X)
Слайд 24
Принципы построения БД
Тема 8
Дальнешее обсуждение:
Протокол-восстановления(повтора)
Протокол-возврата-повтора, почему оба?
Действия в
реальности
Контрольные точки
Сбои физических носителей информации
Слайд 25
Принципы построения БД
Тема 8
Протокол-повтора
(отложенная модификация)
T1: Read(A,t); t
t×2; write (A,t);
Read(B,t); t t×2; write
(B,t);
Output(A); Output(B)
A: 8
B: 8
A: 8
B: 8
память
БД
протокол
Слайд 26
Принципы построения БД
Тема 8
Правила протокола-повтора
(Redo logging rules)
(1)
Для каждого действия создать запись в протоколе-повтора (содержащую новое
значение)
(2) Перед модификацией X на диске (БД), все записитранзакции, модифицирующие X (включая commit) должны быть записаны на диск
(3) Очистить буфер протокола (записать его содержимое на диск) при завершении (commit) транзакции
Слайд 27
Принципы построения БД
Тема 8
Для каждой транзакции Ti, для
которой в протоколе имеется запись :
Для всех
записейl этой транзакции
:
Write(X, v)
Output(X)
Правила восстановления:
протокол-повтора
Слайд 28
Принципы построения БД
Тема 8
(1) Пусть S = множество
транзакций, для которыз в протоколе-повтора имеется запись
(2)
Для каждой записи
в порядке от начала к концу протокола выполнить:
- если Ti ∈ S то Write(X, v)
Output(X)
(3) Для каждой незавершенной транзакции (Ti ∈ S) записать в протокол
Правила восстановления:
протокол-повтора
Слайд 29
Принципы построения БД
Тема 8
Восстановление очень медленное!
Протокол-повтора:
Первая T1 записала A,B Послед.
запись Завершена
год назад Запись
(1 год назад) --> Тем
не менне, нужно
повторить после сбоя!!
...
...
...
Сбой
Слайд 30
Принципы построения БД
Тема 8
Решение: Использование контрольных точек (простая
версия)
Периодически, создавать контрольную точку:
(1) Прервать прием новых транзакций
(2) Подождать
завершения всех текущих транзакций
(3) Очистить буферы протокола (записать на диск)
(4) Записать буферы БД на диск (не очищая буферы)
(5) Записать информацию о котрольной точке (“checkpoint”) в протокол и на диск
(6) Возобновить обработку транзакций
Слайд 31
Принципы построения БД
Тема 8
Пример: Что делать при восстановлении?
Протокол-повтора
(на диске):
Сбой
...
...
...
...
...
...
Слайд 32
Принципы построения БД
Тема 8
Основные недостатки:
Протокол-возврата: не может восстановить
сопию текущего состояния БД
Протокол-повтора: необходимо держать в памяти все
модифицированные блоки до завершения транзакции
Решение: протокол-возврата-повтора!
Запись протокола ⇒
Слайд 33
Принципы построения БД
Тема 8
Правила
Перед изменением на диске элемента
Х БД, вызываемого транзакцией Т, необходимо записать на диск
соответствующую запись протокола
Слайд 34
Принципы построения БД
Тема 8
«Не останавливающие» контрольные точки
L
O
G
для
возврата измененные
буферы памяти
записываются на диск
Start-ckpt
Актив. TR:
Ti,T2,...
end
ckpt
...
...
...
...
Слайд 35
Принципы построения БД
Тема 8
Примеры:что делать при восстановлении?
нет
T1 commit
L
O
G
T1,-
a
...
Ckpt
T1
...
Ckpt
end
...
T1-
b
...
отменить T1 (возвратить a,b)
L
O
G
...
T1
a
...
...
T1
b
...
...
T1
c
...
T1
cmt
...
ckpt-
end
ckpt-s
T1
Повторить T1: (повторить
b,c)
Слайд 36
Принципы построения БД
Тема 8
Процесс восстановления:
Обратный проход (с конца
протокола до места начала последней контрольной точки)
Построить множество S
завершенных транзакций
Отменить действия транзакций, не вошедших в S
Отменить активные транзакции контр.точки
Пройти по цепочке возврата для транзакций из
(список активных транзакций контр.точки) - S
Прямой проход (от начала последней контрольной точки до конца протокола)
Повторить действия транзакций из S
Обратный проход
Прямой проход
начать
контр.-
точку
Слайд 37
Принципы построения БД
Тема 8
Действия в реальном мире
Например, выдача
денег в банкомате
Ti = a1 a2 …... aj …...
an
$
Решение
Выполнять реальнве действия после завершения
транзакции
(2) Желательно, чтобы транзакция была идемпотентной
Слайд 38
Принципы построения БД
Тема 8
банкомат
Выдать $$
(сумма, Tid,
время)
$
выдать(сумма)
посл.Tid:
время:
Слайд 39
Принципы построения БД
Тема 8
Сбои внешних носителей
A: 16
Решение: Иметь несколько копий данных
Слайд 40
Принципы построения БД
Тема 8
Пример 1 Тройная избыточность
Поддерживать 3
копии на различных дисках
Output(X) --> 3 операции вывода
Input(X) -->
3 операции ввода + голосование
X1
X2
X3
Слайд 41
Принципы построения БД
Тема 8
Пример #2 Избыточная запись,
единственное чтение
Поддерживать N копий на различных дисках
Output(X) --> N
операций вывода
Input(X) --> чтение 1 копии - если шибок нет- принять
- иначе читать копию
Предполагается, что можно определить, являются ли прочитаннве данные ошибочными
Слайд 42
Принципы построения БД
Тема 8
Пример #3:
Резервная копия БД
+ протокол
резервная
копия БД
текущая
БД
протокол
если текущая БД потеряна,
восстановить резервную
копию
восстановить текущее состояние, использую протокол
Слайд 43
Принципы построения БД
Тема 8
Когда протокол (или его часть)
становится ненужным?
Контр.
точка
Копия
БД
Посл.
запись
для возвр.
Не нужен для
восстановления диска
Не нужен для возврата
при
сбоях системы
Не нужен для повтора
при сбоях системы
log
время