Этот вопрос проверяет понимание одного из фундаментальных свойств транзакций, обеспечивающего надежность хранения данных.
Durability (Долговечность) — это свойство транзакции, гарантирующее, что一旦 транзакция успешно завершена (зафиксирована), внесенные ею изменения останутся в системе навсегда, даже в случае последующих сбоев (например, отключения питания). Это гарантируется путем записи информации о изменениях в постоянное (немедленное) хранилище, такое как журнал транзакций (WAL), на диск перед тем, как сообщить пользователю об успехе.
Свойство долговечности (Durability) в ACID гарантирует, что результаты завершенной транзакции являются постоянными и не будут утеряны.
Как обеспечивается Durability?
Основной механизм обеспечения долговечности — это Журнал транзакций (Write-Ahead Log, WAL).
Принцип Write-Ahead Log (WAL):
Перед тем как какие-либо изменения данных будут записаны в основные файлы базы данных на диске, информация об этих изменениях сначала записывается в специальный журнальный файл (лог).
Этот лог часто называется журналом транзакций или журналом повторения (redo log).
Процесс фиксации транзакции:
Когда транзакция фиксируется (COMMIT), все изменения, которые она произвела, сначала записываются в журнал транзакций на диск. Эта операция принудительной записи (fsync) гарантирует, что данные физически сохранены.
Только после успешной записи в журнал на диск пользователю возвращается подтверждение об успешной фиксации транзакции.
Сами изменения в основных таблицах базы данных могут быть записаны на диск позже, в фоновом режиме (так называемая "ленивая" запись - lazy write).
Восстановление после сбоя:
Если после фиксации транзакции происходит сбой (например, сервер выключается), при следующем запуске СУБД запускает процесс восстановления.
СУБD просматривает журнал транзакций и находит все изменения, которые были зафиксированы, но не были применены к основным файлам данных.
Эти изменения повторно применяются (redo), что гарантирует, что результаты всех завершенных транзакций будут сохранены.
Вывод: Durability — это критически важное свойство для любой серьезной СУБД, обеспечивающее надежность данных. Оно достигается за счет использования журнала транзакций (WAL), который гарантирует, что ни одна подтвержденная транзакция не будет потеряна из-за аппаратного сбоя.