Как работает журнал транзакций

 

SQL Server использует буферный кэш — хранящуюся в памяти структуру, куда помещаются страницы данных с диска, с которыми собираются работать приложения и пользователи системы.

 

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

Измененная страница в кэше, которая еще не была записана на диск, называется затронутой страницей (dirty page).

Запись затронутой страницы из кэша на диск называется сбросом страницы (page flushing).

 

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

Поэтому журнал транзакций SQL Server называют опережающим (write-ahead).

 

Сброс данных из кэша на диск производится периодически:

либо в результате процесса, называемого контрольной точкой (checkpoint process)

 

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

 

Потоки ОС могут записать затронутые страницы на диск до того, как SQL Server определит, завершена ли транзакция.

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