Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными.docx
Скачиваний:
8
Добавлен:
14.08.2019
Размер:
435.99 Кб
Скачать
  1. Журнализация и буферизация транзакций.

Журнализация изменений связана не только с управлением транзакциями, но и с буферизацией страниц базы данных в оперативной памяти. По вполне объективным причинам существует значительная разница между скоростью работы процессоров и устройств внешней памяти, поэтому буферизация страниц базы данных в оперативной памяти - единственный способ достижения удовлетворительной работы СУБД,

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

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

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

Основным принципом согласованной политики выталкивания буфера журнала и буферов страниц базы данных является тот факт, что запись об изменении объекта базы данных должна попасть во внешнюю память журнала раньше, чем измененный объект окажется во внешней памяти базы данных. Соответствующий протокол журнализации называется WAL (Write Ahead Log) и состоит в том, что если требуется вытолкнуть во внешнюю память измененный объект базы данных, то перед этим нужно гарантировать выталкивание во внешнюю память журнала записи о его изменении.

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

Минимальным (достаточным) требованием, гарантирующим возможность восстановления последнего согласованного состояния базы данных, является выталкивание при фиксации транзакций во внешнюю память журнала всех изменений об изменении базы данных этой транзакции. При этом последняя запись в журнал, производимая от имени данной транзакции - запись о конце транзакции.

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

  1. Параллельное выполнение транзакций.

Для управления параллельным доступом в СУБД существует два инструмента – планировщик и протокол. Планировщик – часть СУБД которая отвечает за такую последовательность атомарных шагов одновременно выполняющихся транзакций, при которой транзакции не оказывают взаимного влияния.

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

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

Непоследовательный плана – это план в котором чередуются операции из некоторого набора одновременно выполняемых транзакций. Непоследовательный плана является корректным, если он приводит к получению тех же результатов, которые получаются при использовании некоторого последовательного плана. Такой план называется упорядоченным. /*Все три проблемы параллельного доступа были обусловлены неупорядоченностью плана выполнения транзакций. */

Пример. Перевод денежных средств между счетами А, В, С. Две транзакции.

T1: read (A); A:=A-10; write(A); read(B); B:=B+10; write (B);

T2: read (B); B:=B-20; write(B); read(C); C:=C+20; write (C);

Корректность работы заключается в сохранении постоянного значения суммой А+В+С.