Сохранение целостности данных при использовании кэшей записи

Оценить
(0 голоса)

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

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

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

В случае аварии электропитания и сразу после того, как питание восстановлено и БД перезапущена, СУБД выполняет восстановление путем отката и повтора транзакций. Менеджер восстановления проверяет, все ли изменения, зарегистрированные в журнале, отражены в страницах БД на диске. Если по каким-нибудь причинам страница на диске является устаревшей, то проводятся изменения. Когда процесс восстановления будет завершен, страницы на диске будут синхронизированы с журналом.

Очевидно, что журнал и любые архивы журналов должны быть достаточно велики, чтобы сохранять все данные, необходимые для восстановления БД.

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

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

Должны случиться все перечисленные ниже события, чтобы данные могли быть безвозвратно потеряны:

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

•             Не вся дисковая информация была сброшена из кэша записи на сам диск.

•             Электропитание не восстановилось до того, как разрядились аккумуляторные батареи кэша записи (или произошел отказ аккумулятора).

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

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

Наихудшим сценарием для кэшей записи является ситуация, когда перед аварией электропитания на диск была успешно записана только часть блока БД (например, первые два сектора по 512 байт из блока размером 2 Кбайт). Если этот кэш не "подпитывается" от аккумулятора, то остальная часть информации теряется, а в результате этот блок данных оказывается разрушенным. Именно по этой причине фирма Sun поставляет устройства хранения данных, в которых на уровне дисков разрешен только кэш чтения; но не кэш записи.

Использование кэшей записи для журналов БД
Высокая готовность
Планирование отказа дисков
Влияние зеркалирования на производительность
Устранение одиночных отказов

Добавить комментарий


Защитный код
Обновить