Мы рады сообщить, что в SQL Server 2022 достигнуты серьёзные успехи в ускорении восстановления базы данных (ADR). Это еще больше повышает доступность и масштабируемость баз данных, в первую очередь направлено на облегчение очистки и управления хранилищем версий - Persistent Version Store (PVS).
Обзор ADR
ADR ещё больше повышает доступность баз данных, особенно при наличии длинных транзакций. Обеспечивает это специальный процесс ядра, выполняющий Recovery. Функционал ADR появился в SQL Server 2019 (15.x) и был сильно переработан в SQL Server 2022 (16.x). ADR включен по умолчанию и не может быть отключен.
Основные преимущества ADR
Быстрое и последовательное восстановление базы данных
Благодаря ADR длинные транзакции не влияют на общее время восстановления, обеспечивая быстрое и последовательное восстановление базы данных независимо от количества активных транзакций в системе или от их размера.
Мгновенный откат транзакции
При использовании ADR откат транзакции происходит мгновенно, независимо от времени, в течение которого транзакция была активной, или числа выполненных изменений.
Агрессивное усечение журнала
При использовании ADR журнал транзакций усекается агрессивно даже при наличии длинных транзакций, что предотвращает его бесконтрольный рост.
В ADR полностью перестроен процесс Recovery, выполняемый ядром сервера баз данных:
делает его стабильно быстрым, избегая просмотра всего журнала транзакций. С новым ADR журнал транзакций начинает обрабатываться с последней успешной контрольной точки (или с самого старого LSN для «грязных» страниц). В результате этого на время восстановления не влияют длинные транзакции, если таковые есть.
минимизирует размер журнала транзакций, поскольку больше нет необходимости хранить записи в журнале для всей длинной транзакции. В результате журнал транзакций можно эффективно очистить, создав контрольную точку и сделав его резервную копию.
На более высоком уровне эти улучшения в ADR обеспечивают лучшее время восстановления баз данных за счет управления версиями всех физических изменений базы данных и отмены только логических операций, количество которых ограничено и может быть отменено практически мгновенно. Любые транзакции, которые были активны на момент сбоя, помечаются как прерванные, и поэтому любые версии, созданные этими транзакциями, будут просто игнорироваться конкурирующими запросами.
Улучшения ADR в SQL Server 2022
Многопоточная очистка версии
В SQL Server 2019 (15.x) процесс очистки в ADR выполнялся единственным потоком. Начиная с SQL Server 2022 (16.x), этот процесс использует многопоточную очистку версий - Multi-Threaded Version Cleanup (MTVC), что позволяет параллельно очищать несколько баз данных одного экземпляра SQL Server.
В SQL Server 2022 MTVC включен по умолчанию и использует один поток для каждого экземпляра SQL. Чтобы настроить несколько потоков для очистки версии, нужна изменить конфигурацию с помощью sp_configure, указав нужное значение для параметра: «ADR Cleaner Thread Count», как это показано в примере ниже:
|
В этом примере, после настройки числа процессов очистки в ADR равным четырем для экземпляра с двумя базами данных, очистка ADR выделит только по одному потоку для каждой базы данных, а оставшиеся два потока будут бездействующими. Рекомендуется делать равным число потоков «ADR Cleaner Thread Count» и пользовательских баз данных.
Примечание. Максимальное количество потоков очистки в ADR ограничено количеством ядер, используемых экземпляром SQL Server. Например, если вы используете SQL Server на восьми-ядерном компьютере, максимальное количество потоков очистки ADR, которое будет доступно для ядра сервера баз данных, будет равно восьми, даже если число через sp_configure
задано большее восьми.
Очистка пользовательских транзакций
Это улучшение позволяет транзакциям пользователей запускать очистку на страницах, которые не могут быть обработаны обычным процессом очистки из-за конфликтов блокировок. Это помогает обеспечить более эффективную работу процесса очистки ADR.
Уменьшение объема памяти для трекера PVS страниц
Это улучшение переводит отслеживание страницы хранилища версий (PVS) на уровень экстентов, что уменьшает объем памяти, необходимый для поддержки версий страниц.
Улучшение очистки в ADR
Очистка ADR стала эффективнее очищать старые версии в хранилище версий, что улучшило для SQL Server отслеживание и запись неполных страниц хранилища версий, и привело к более оптимальному использованию памяти.
Хранилище версий на уровне транзакций
ADR теперь умеет очищать версии, принадлежащие зафиксированным транзакциям, независимо от того, есть ли в системе прерванные транзакции. PVS это механизм ядра для хранения версий строк в самой базе данных, а не в традиционном хранилище версий в tempdb. PVS страницы высвобождаются, даже если очистка карты прерванных транзакций не закончена. В результате этого улучшения меньше растёт PVS, даже если очистка ADR выполняется медленно или не удаётся.
Новые Extended Events
Для телеметрии в многопоточной очистке версий ADR PVS добавлено новое событие xEvents: tx_mtvc2_sweep_stats
.
Резюме
В этой статье мы рассмотрели улучшения в ADR, которые были включены в SQL Server 2022, и еще больше повышают доступность и масштабируемость ваших баз данных. На рисунке ниже показано, насколько это может поднять эффективность Recovery на старте сервера.