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


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

применимо к следующим версиям: 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. Рассмотрите возможность пакетного изменения в инструкциях с несколькими строками, где это возможно, и избегайте большого объема небольших транзакций 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 в tempdb, эксклюзивная блокировка базы данных не требуется, и условие завершения не должно быть указано. Однако перезапуск ядра СУБД должен произойти, чтобы изменения вступили в силу.

Отключение ADR

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

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

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

Изменение файловой группы 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. После завершения процесса и при отключении ADR можно убедиться, что сведения о версии удаляются, запрашивая 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 в другую файловую группу не поддерживается в tempdb, потому что в файловую группу нельзя добавлять файлы в tempdb.

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

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