Поделиться через


Управление ускоренным восстановлением баз данных

применимо к следующим версиям: SQL Server 2019 (15.x) и более поздних версий

В этой статье описано, как включить и отключить ускоренное восстановление базы данных (ADR) с помощью Transact-SQL (T-SQL) в SQL Server 2019 (15.x) и более поздних версий, а также как изменить файловую группу хранения постоянных версий (PVS), используемую ADR.

Примечание.

В Базе данных SQL Azure, Управляемом экземпляре SQL Azure и базе данных SQL в Microsoft Fabric всегда включено ускоренное восстановление базы данных (ADR). При возникновении проблем, таких как высокая загрузка хранилища с помощью PVS или медленной очистки ADR, см. статью Устранение неполадок с ускорением восстановления базы данных или обращение в службу поддержки Azure .

Когда следует использовать ускоренное восстановление баз данных

Многие клиенты находят ускорение восстановления базы данных (ADR) ценной технологии для улучшения времени восстановления базы данных.

Если рабочие нагрузки базы данных часто сталкиваются со следующими сценариями, вы можете воспользоваться ADR:

  • Длительные транзакции, которые нельзя избежать. Например, в случаях, когда длительные транзакции подвержены риску отката, ADR может помочь.
  • Активные транзакции, которые приводят к значительному росту журнала транзакций.
  • Длительное восстановление базы данных, влияющее на доступность базы данных (например, после неожиданного перезапуска SQL Server или отката транзакций вручную).

Для следующих сценариев не рекомендуется использовать ADR:

  • Не поддерживаются базы данных, использующие зеркальное отображение базы данных с использованием.
  • Если приложение использует большой объем однострочных изменений в отдельных транзакциях, рабочая нагрузка может оказаться не оптимальной для ADR. Рассмотрите возможность пакетного изменения в инструкциях с несколькими строками, где это возможно, и избегайте большого объема небольших транзакций DML.

Включение ADR

ADR отключен по умолчанию и доступен начиная с SQL Server 2019 (15.x).

Используйте следующую команду Transact-SQL (T-SQL), чтобы включить ADR:

ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;

Для включения или отключения ADR необходимо включить или отключить монопольную блокировку базы данных. Это означает, что команда ALTER DATABASE блокируется до тех пор, пока все активные сеансы не завершатся, и что все новые сеансы ждут после команды ALTER DATABASE. Если важно завершить операцию и удалить блокировку, можно использовать предложение завершения, WITH ROLLBACK [IMMEDIATE | AFTER {number} SECONDS | NO_WAIT] для прерывания любых активных сеансов в базе данных. Дополнительные сведения см. в параметрах ALTER DATABASE SET.

Отключение ADR

Чтобы отключить ADR, используйте следующую команду T-SQL:

ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO

Даже после отключения ADR могут быть версии, хранящиеся в PVS, которых система всё ещё нуждается для логического возврата до завершения всех активных транзакций.

Изменение файловой группы PVS

По умолчанию данные сохраняемого хранилища версий (PVS) хранятся в файловой группе PRIMARY. При необходимости можно переместить PVS в другую файловую группу. Например, может потребоваться больше места или более быстрого хранения.

Чтобы изменить расположение PVS на другую файловую группу, выполните следующие действия.

  1. Создайте файловую группу для PVS и добавьте хотя бы один файл данных в эту файловую группу. Например:

    ALTER DATABASE [<db_name>] ADD FILEGROUP [VersionStoreFG];
    GO
    
    ALTER DATABASE [<db_name>]
    ADD FILE
    (
       NAME = N'VersionStoreFG',
       FILENAME = N'E:\DATA\VersionStore.ndf',
       SIZE = 8192 MB,
       FILEGROWTH = 64 MB
    )
    TO FILEGROUP [VersionStoreFG];
    
  2. Отключите ADR со следующей командой T-SQL:

    ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
    GO
    
  3. Дождитесь удаления всех версий, хранящихся в PVS.

    Чтобы включить ADR, используя новое расположение PVS, сначала убедитесь, что все сведения о версиях удалены из предыдущего расположения PVS. Вы можете принудительно выполнить очистку с помощью хранимой процедуры sys.sp_persistent_version_cleanup:

    EXEC sys.sp_persistent_version_cleanup [<db_name>];
    

    Хранимая процедура sys.sp_persistent_version_cleanup является синхронной, что означает, что она не завершится, пока все сведения о версии не будут удалены из текущего PVS. После завершения можно убедиться, что сведения о версии удаляются, запрашивая sys.dm_tran_persistent_version_store_stats и проверяя значение persistent_version_store_size_kb, например следующий пример:

    SELECT DB_NAME(database_id),
           persistent_version_store_size_kb
    FROM sys.dm_tran_persistent_version_store_stats
    WHERE database_id = [MyDatabaseID];
    

    Если значение persistent_version_store_size_kb равно 0, вы можете повторно включить функцию ADR с помощью PVS в новой группе файлов.

  4. Включите ADR и укажите новое расположение PVS с помощью следующей команды T-SQL:

    ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON
    (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
    

Контроль размера PVS

После включения ADR в базе данных отслеживайте размер сохраняемого хранилища версий (PVS) и производительности очистки PVS. Вы можете отслеживать работоспособность PVS с помощью методов, найденных в Устранение неполадок ускоренного восстановления базы данных.

Если у вас есть нагрузка с большим объемом инструкций DML (INSERT, UPDATE, DELETE, MERGE), например с высоким объемом транзакций OLTP, может потребоваться период восстановления для процесса очистки PVS, чтобы освободить пространство. Как правило, циклы бизнес-операций учитывают это время, но в некоторых сценариях может потребоваться запустить процесс очистки PVS вручную, чтобы учесть модели активности приложения.

  • Чтобы активировать процесс очистки PVS вручную между рабочими нагрузками или во время периодов обслуживания, используйте хранимую процедуру sys.sp_persistent_version_cleanup.

  • Если процесс очистки PVS выполняется в течение длительного периода времени, может возникнуть вероятность увеличения количества прерванных транзакций, что также приводит к увеличению размера PVS. Используйте sys.dm_tran_aborted_transactions DMV, чтобы сообщить о количестве прерванных транзакций, и используйте sys.dm_tran_persistent_version_store_stats, чтобы сообщить о времени начала и окончания очистки, а также о размере PVS.

  • Рабочие нагрузки с длительными запросами, использующими изоляцию SNAPSHOT или изоляцию READ COMMITTED при включенной опции базы данных READ_COMMITTED_SNAPSHOT (RCSI), могут отложить очистку PVS для всех баз данных на экземпляре механизма базы данных, что приведет к увеличению размера PVS. Дополнительные сведения см. в разделе о длительных сканах активных моментальных снимков в разделе Устранение неполадок ускоренного восстановления базы данных.