SQL Server Database Engine выполняет изменения страниц базы данных в памяти (в буферном кэше) и не записывает эти страницы на диск сразу же после каждого изменения. Вместо этого Database Engine периодически создает контрольную точку на каждой базе данных. Именно в контрольной точке он записывает из памяти на диск текущие страницы, измененные в памяти (известные как измененные незафиксированные страницы), а также записывает сведения в журнал транзакций.
Компонент Database Engine поддерживает четыре типа контрольных точек: автоматические, косвенные, ручные и внутренние.
Автоматические контрольные точки (Automatic checkpoints). Создаются с помощью системной хранимой процедуры sp_configure, которой передается параметр конфигурации сервера recovery interval:
EXEC sp_configure "recovery interval«,»seconds" **.
В соответствии с верхним пределом времени, указанном в этом параметре, контрольные точки автоматически выдаются в фоновом режиме. Автоматические контрольные точки выполняются до их завершения. Автоматические контрольные точки регулируются в зависимости от числа необработанных записей и от того, обнаруживает ли компонент Database Engine увеличение задержки записи более чем на 20 миллисекунд.
Косвенные контрольные точки (Indirect checkpoints). Создаются с помощью инструкции ALTER DATABASE:
ALTER DATABASE … SET TARGET_RECOVERY_TIME
=target_recovery_time { SECONDS | MINUTES }.
Выдаются в фоновом режиме для обеспечения соответствия пользовательскому целевому времени восстановления для конкретной базы данных. Целевое время восстановления по умолчанию равно 0, что приводит к использованию эвристики автоматических контрольных точек в базе данных. Если была использована инструкция ALTER DATABASE для установки TARGET_RECOVERY_TIME в значение > 0, то используется это значение, а не интервал восстановления, указанный для экземпляра сервера.
Ручные контрольные точки (Manual checkpoints). Выдаются при выполнении команды Transact-SQL CHECKPOINT:
CHECKPOINT [ checkpoint_duration ]
Ручная контрольная точка срабатывает в текущей базе данных для конкретного соединения. По умолчанию ручная контрольная точка выполняется до ее завершения. Регулирование работает так же, как и для автоматической контрольной точки. При необходимости параметр checkpoint_duration указывает требуемое время в секундах для завершения контрольной точки.
Внутренние контрольные точки (Internal checkpoints). Выдаются различными операциями сервера, такими как резервное копирование и создание моментального снимка базы данных, для обеспечения соответствия образа диска текущему состоянию журнала.