Принципы построения БД Тема 8 * Принципы построения и работы баз данных Тема 08: Восстановление при сбоях 5informatika.net Тема 8
Принципы построения БД Тема 8 * Часть 2 Восстановление при сбоях Гл.17 Управление параллельным доступом Гл.18 Обработка транзакций Гл.19 Тема 8
Принципы построения БД Тема 8 * Целостность и корректность данных Хотели бы вы, чтобы данные были правильными постоянно EMP Name White Green Gray Age 52 3421 1 Тема 8
Принципы построения БД Тема 8 * Ограничения целостности Условия, которым долны удовлетворять данные Примеры: - x является ключом отношения R - выполняется функциональная зависимость x y для всех кортежей из R - Domain(x) = {Red, Blue, Green} - никто из служащих не должен иметь зарплату, превышающую среднюю более чем в 2 раза Тема 8
Принципы построения БД Тема 8 * Определения: Согласованное состояние: состояние, в котором выполняются все ограничения целостности Согласованная БД: База данных в согласованном состоянии Тема 8
Принципы построения БД Тема 8 * Ограничения целостности (как мы их знаем ) могут не обеспечивать «полную корректность» Пример 1 Условия на транзакции Когда зарплата обновляется, новая зарплата > старая зарплата Кода удаляется запись счета в банке, остаток = 0 можно имитировать простым ограничением Тема 8
Принципы построения БД Тема 8 * Пример 2 База данных должна отражать реальный мир БД Реальность Ограничения целостности (как мы их знаем ) могут не обеспечивать «полную корректность» Тема 8
Принципы построения БД Тема 8 * Наблюдение: БД не может быть согласована постоянно из-за необходимости изменений! Пример: a1 + a2 +…. an = Итог (ограничение) Добавить $100 к a2: a2 a2 + 100 Итог Итог + 100 а2 Итог Тема 8
Принципы построения БД Тема 8 * Транзакция: совокупность действий, сохраняющая согласованность БД Согласов.БД Согласов.БД T Важное предположение Если T начинается в согласованном состоянии и выполняется изолированно (т.е.без конкуренции с другими действиями над БД), то после ее завершения БД остается в согласованном состоянии Тема 8
Принципы построения БД Тема 8 * Как могут быть нарушены ограничения целостности? Ошибка в алгоритме транзакции Ошибка в СУБД Сбой оборудования, например, сбой диска, в результате которогь изменяется остато ра счете Общие данные T1: увеличить на 10% зарплату программистам из списка T2: изменить программистов из списка на системных аналитиков Тема 8
Принципы построения БД Тема 8 * Как можно предотвратить/исправить нарушения? Глава 17: только при сбоях системы Chapter 18: только из-за общих данных Chapter 19: при сбоях системы и общих данных Не будем рассматривать: Как писать правильные транзакции Как писать правильные СУБД Проверку и восстановление ограничений Рассматриваемые здесь решения не знают обограничениях Тема 8
Принципы построения БД Тема 8 * Восстановление при сбоях Первое, что нужно сделать – описать модель сбоя События Желательные Нежелательные Ожидаемые Неожидаемые Процессор Память Диск CPU M D Тема 8
Принципы построения БД Тема 8 * Желательные события: то, что программа должна делать в соответствии с ее руководством. Нежелательные ожидаемые события - зависание или сбой системы, - потеря памяти, - остановка процессора, сброс Нежелательные неожидаемые события - все остальное ( необъянимая потеря данных, землетрясение, нападение террористов) Тема 8
Принципы построения БД Тема 8 * Является ли эта модель приемлемой? Подход: Добавить низко уровневые проверки + избыточность для увеличения вероятности, что система выживет при сбое Например, поддержка точной копии диска или дискового массива Проверка четности при обращении к памяти Проверки процессора Тема 8
Принципы построения БД Тема 8 * Второй важный момент после выбора модели: Иерархия памяти Операции Input (x): блок с элементом БД x память Output (x): блок с элементом БД x диск Read (x,t): если нужно выполнить input(x), копировать в переменную t значение x из блока Write (x,t): если нужно выполнить input(x), значение x в блоке t Память Диск x x Тема 8
Принципы построения БД Тема 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 Необходима (А)томарность (неделимость) транзакции – выполнение либо всех действий транзакции либо никаких. Тема 8
Принципы построения БД Тема 8 * Файл протокола (журнал регистрации) Протокол – последовательность записей о том что происходит с каждой транзакцией. Эти последовательности для разных транзакций могут перекрываться. При сбое системы происходит просмотр протокола, незавершенные по протоколу транзакции должны быть либо повторены, либо полностью отменены (каждое действие, отмеченное в протоколе). Типы записей: START, COMMIT, ABORT Тема 8
Принципы построения БД Тема 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 память диск протокол Одно из решений - протокол-возврата (немедленная модификация) Тема 8
Принципы построения БД Тема 8 * Одно “осложнение” Протокол сначала заносится в память, а потом уже на диск (для эффективной буферизации) Не записывается на диск при каждом действии память БД Протокол A: 8 16 B: 8 16 Log: A: 8 B: 8 Тема 8
Принципы построения БД Тема 8 * Протокол сначала заносится в память, а потом уже на диск (для эффективной буферизации) Не записывается на диск при каждом действии память БД Протокол A: 8 16 B: 8 16 Log: A: 8 B: 8 ... Тема 8
Принципы построения БД Тема 8 * Правила протокола-возврата (Undo logging rules) (1) Для каждого действия создать запись в протоколе-возврата (содержащую старое значение) (2) Перед изменением x на диске, запись, содержащая старое значение x должна быть уже записана в файл протокола-возврата (3) Перед записью в файл протокола все операции записи действий транзакции на диск должны быть уже завершены Тема 8
Принципы построения БД Тема 8 * Правила восстановления: протокол-возврата Для каждой транзакции Ti, для которой в протоколе имеется запись : Если для нее в ротоколе имеется также запись или , то ничего не делать Иначе для всех записей в протоколе: write (X, v) output (X ) записать в протокол Тема 8
Принципы построения БД Тема 8 * Правила восстановления: протокол-возврата Пусть S = множество транзакций с записями в протоколе, но без записей (или ) Для каждой записи в протоколе в обратном порядке (более поздние обрабатываются раньше) выполнить: - если Ti S то - write (X, v) - output (X) Для каждой транзакции Ti S записать в протокол Что еcли произойдет сбой во время восстановления? Нет проблем! Восстановления с использованием протокола возврата – идемпотентно (т.е.X * X = X) Тема 8
Принципы построения БД Тема 8 * Дальнешее обсуждение: Протокол-восстановления(повтора) Протокол-возврата-повтора, почему оба? Действия в реальности Контрольные точки Сбои физических носителей информации Тема 8
Принципы построения БД Тема 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 память БД протокол Тема 8
Принципы построения БД Тема 8 * Правила протокола-повтора (Redo logging rules) (1) Для каждого действия создать запись в протоколе-повтора (содержащую новое значение) (2) Перед модификацией X на диске (БД), все записитранзакции, модифицирующие X (включая commit) должны быть записаны на диск (3) Очистить буфер протокола (записать его содержимое на диск) при завершении (commit) транзакции Тема 8
Принципы построения БД Тема 8 * Для каждой транзакции Ti, для которой в протоколе имеется запись : Для всех записейl этой транзакции : Write(X, v) Output(X) Правила восстановления: протокол-повтора Тема 8
Принципы построения БД Тема 8 * (1) Пусть S = множество транзакций, для которыз в протоколе-повтора имеется запись (2) Для каждой записи в порядке от начала к концу протокола выполнить: - если Ti S то Write(X, v) Output(X) (3) Для каждой незавершенной транзакции (Ti S) записать в протокол Правила восстановления: протокол-повтора Тема 8
Принципы построения БД Тема 8 * Восстановление очень медленное! Протокол-повтора: Первая T1 записала A,B Послед. запись Завершена год назад Запись (1 год назад) --> Тем не менне, нужно повторить после сбоя!! ... ... ... Сбой Тема 8
Принципы построения БД Тема 8 * Решение: Использование контрольных точек (простая версия) Периодически, создавать контрольную точку: (1) Прервать прием новых транзакций (2) Подождать завершения всех текущих транзакций (3) Очистить буферы протокола (записать на диск) (4) Записать буферы БД на диск (не очищая буферы) (5) Записать информацию о котрольной точке (“checkpoint”) в протокол и на диск (6) Возобновить обработку транзакций Тема 8
Принципы построения БД Тема 8 * Пример: Что делать при восстановлении? Протокол-повтора (на диске): Сбой ... ... ... ... ... ... Тема 8
Принципы построения БД Тема 8 * Основные недостатки: Протокол-возврата: не может восстановить сопию текущего состояния БД Протокол-повтора: необходимо держать в памяти все модифицированные блоки до завершения транзакции Решение: протокол-возврата-повтора! Запись протокола Тема 8
Принципы построения БД Тема 8 * Правила Перед изменением на диске элемента Х БД, вызываемого транзакцией Т, необходимо записать на диск соответствующую запись протокола Тема 8
Принципы построения БД Тема 8 * «Не останавливающие» контрольные точки L O G для возврата измененные буферы памяти записываются на диск Start-ckpt Актив. TR: Ti,T2,... end ckpt ... ... ... ... Тема 8
Принципы построения БД Тема 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) Тема 8
Принципы построения БД Тема 8 * Процесс восстановления: Обратный проход (с конца протокола до места начала последней контрольной точки) Построить множество S завершенных транзакций Отменить действия транзакций, не вошедших в S Отменить активные транзакции контр.точки Пройти по цепочке возврата для транзакций из (список активных транзакций контр.точки) - S Прямой проход (от начала последней контрольной точки до конца протокола) Повторить действия транзакций из S Обратный проход Прямой проход начать контр.- точку Тема 8
Принципы построения БД Тема 8 * Действия в реальном мире Например, выдача денег в банкомате Ti = a1 a2 …... aj …... an $ Решение Выполнять реальнве действия после завершения транзакции (2) Желательно, чтобы транзакция была идемпотентной Тема 8
Принципы построения БД Тема 8 * банкомат Выдать $$ (сумма, Tid, время) $ выдать(сумма) посл.Tid: время: Тема 8
Принципы построения БД Тема 8 * Сбои внешних носителей A: 16 Решение: Иметь несколько копий данных Тема 8
Принципы построения БД Тема 8 * Пример 1 Тройная избыточность Поддерживать 3 копии на различных дисках Output(X) --> 3 операции вывода Input(X) --> 3 операции ввода + голосование X1 X2 X3 Тема 8
Принципы построения БД Тема 8 * Пример #2 Избыточная запись, единственное чтение Поддерживать N копий на различных дисках Output(X) --> N операций вывода Input(X) --> чтение 1 копии - если шибок нет- принять - иначе читать копию Предполагается, что можно определить, являются ли прочитаннве данные ошибочными Тема 8
Принципы построения БД Тема 8 * Пример #3: Резервная копия БД + протокол резервная копия БД текущая БД протокол если текущая БД потеряна, восстановить резервную копию восстановить текущее состояние, использую протокол Тема 8
Принципы построения БД Тема 8 * Когда протокол (или его часть) становится ненужным? Контр. точка Копия БД Посл. запись для возвр. Не нужен для восстановления диска Не нужен для возврата при сбоях системы Не нужен для повтора при сбоях системы log время Тема 8
Принципы построения БД Тема 8 * Итог Согласованность данных Один источник проблем - сбои: - Использование протоколов - Избыточность Другой источник проблем – совместное использование данных: -> следующая тема Тема 8