Блокирует ли контрольная точка любую другую операцию?

Когда Sql Server выдает контрольную точку, блокирует ли он все остальные операции до тех пор, пока контрольная точка не будет завершена?

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

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

Как сервер sql предотвращает загрязнение некоторых не грязных страниц во время выполнения контрольной точки?

Блокирует ли он все записи до завершения контрольной точки?


person Marka    schedule 16.10.2012    source источник
comment
Вы вообще проводили какие-то исследования?   -  person Rob    schedule 16.10.2012
comment
@Robuust Я отредактировал свой вопрос.   -  person Marka    schedule 16.10.2012


Ответы (2)


Контрольные точки не блокируют запись.

Контрольная точка имеет начальный и конечный LSN. Это гарантирует, что все страницы на диске находятся как минимум на начальном LSN контрольной точки. Не имеет значения, находится ли какая-либо страница в более позднем LSN (поскольку она была записана после запуска контрольной точки).

Контрольная точка гарантирует только минимальный номер LSN для всех страниц на диске. Это не гарантирует точного LSN.

Это имеет смысл, поскольку вы можете удалить все записи журнала транзакций, которые содержат информацию из номеров LSN, предшествующих LSN начала контрольной точки. Это цель контрольной точки: позволить частям журнала стать неактивными.

Контрольные точки не нужны для согласованности и правильности данных. Они просто освобождают место для журнала и сокращают время восстановления.

person usr    schedule 16.10.2012

при возникновении контрольной точки сервер должен записать все грязные страницы

И это то, что он делает. Однако гарантия, предоставляемая контрольной точкой, заключается в том, что она записывает все страницы, которые были грязными в момент запуска контрольной точки. Любая страница, которая стала грязной во время работы контрольной точки, может быть записана или не записана, но гарантировано, что она будет записана. Эта гарантия предлагает оптимизацию, заключающуюся в том, что физическое восстановление может начать REDO с последней контрольной точки, поскольку все в журнале до нее уже применено к страницам данных (не нужно переделывать). Есть даже на странице Википедии для ARIES:

Наивный способ создания контрольных точек предполагает блокировку всей базы данных, чтобы избежать изменений в DPT и TT во время создания контрольной точки. Нечеткое ведение журнала позволяет обойти это, записывая две записи в журнал. Здесь начинается запись одного нечеткого журнала и, после подготовки данных контрольной точки, фактическая контрольная точка. Между двумя записями могут быть созданы другие записи журнала.

ответ usr объясняет, как это достигается (используя начальный LSN контрольной точки и конечный LSN).

person Remus Rusanu    schedule 16.10.2012