1.11.25

Что делает контрольная точка для tempdb?

Автор: Paul Randal, What does checkpoint do for tempdb?

В предыдущей статье я подробно разобрал, как работают контрольные точки и что именно при этом происходит (см. «Как работают контрольные точки и что записывается в журнал транзакций»). А ещё ранее я писал, почему в буферном пуле на загруженной системе может казаться, что там непропорционально много «грязных» страниц tempdb; сейчас хочу чуть подробнее прояснить, почему так и как контрольные точки работают для tempdb. Чтобы посмотреть содержимое буферного пула, см. «Что находится в буферном пуле?».

Контрольная точка для tempdb выполняется только тогда, когда файл журнала tempdb заполнен на 70% — это делается, чтобы по возможности не допускать роста журнала tempdb (заметьте, что долго идущая транзакция по‑прежнему может, по сути, «заложить» журнал и не давать его очистить, как и в пользовательской базе).

Если вы прочитали первую из упомянутых статей, то знаете: когда выполняется контрольная точка в пользовательской базе, все «грязные» страницы этой базы сбрасываются на диск (а также выполняется ряд других действий). Для tempdb этого не происходит. Tempdb не восстанавливается после сбоя, и, следовательно, нет необходимости принудительно писать «грязные» страницы tempdb на диск, за исключением случая, когда lazywriter (часть буферного пула) вынужден освобождать место для страниц из других баз. Разумеется, когда вы выполняете ручную команду CHECKPOINT, все «грязные» страницы будут записаны; но при автоматических контрольных точках — нет. Это легко проверить: запустите большую транзакцию со вставкой в пользовательскую таблицу в tempdb и наблюдайте в счётчиках Databases/Log File(s) Used Size (KB) и Databases/Log Truncations для tempdb, как они растут; затем посмотрите, уменьшилось ли число «грязных» страниц в tempdb — не уменьшится.

Ещё одно действие, выполняемое при контрольной точке в базах с моделью восстановления SIMPLE, — проверка VLF журнала на возможность помечать их как неактивные (см. «TechNet Magazine: Ведение журнала и восстановление в SQL Server» и «Поговорим ещё о циклической природе журнала транзакций»). Благодаря этому журнал может «оборачиваться» и сам себя перезаписывать без роста — и этот процесс нужен tempdb для корректного управления размером журнала.

Вот и всё, что происходит при контрольной точке tempdb: никакие страницы данных не записываются на диск, за исключением случая ручной команды CHECKPOINT.



Комментариев нет:

Отправить комментарий