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

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

Включение и управление ADREnabling and controlling ADR

Функция ADR в SQL Server 2019 (15.x)SQL Server 2019 (15.x) по умолчанию отключена. Ею можно управлять с помощью синтаксиса DDL:ADR is off by default in SQL Server 2019 (15.x)SQL Server 2019 (15.x), and can be controlled using DDL syntax:

ALTER DATABASE [DB] SET ACCELERATED_DATABASE_RECOVERY = {ON | OFF}
[(PERSISTENT_VERSION_STORE_FILEGROUP = { filegroup name }) ];

Используя этот синтаксис, можно включать или отключать функцию, а также назначать определенную файловую группу для данных постоянного хранилища версий (PVS).Use this syntax to control whether the feature is on or off, and designate a specific filegroup for the persistent version store (PVS) data. Если файловая группа не указана, PVS сохраняется в файловой группе PRIMARY.If no filegroup is specified, the PVS will be stored in the PRIMARY filegroup.

Управление файловой группой постоянного хранилища версийManaging the persistent version store Filegroup

Функция ADR основана на управлении версиями. Различные версии элементов данных хранятся в PVS.The ADR feature is based on having changes versioned, with different versions of a data element kept in the PVS. Существуют рекомендации по размещению PVS и управлению размером данных в PVS.There are considerations to locating where the PVS is located and in how to manage the size of the data in the PVS.

Включение ADR без указания файловой группыTo enable ADR without specifying a filegroup

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON;
GO

Если файловая группа PVS не указана, данные PVS хранятся в файловой группе PRIMARY.In this case, when the PVS filegroup is not specified, the PRIMARY filegroup holds the PVS data.

Включение ADR и настройка хранения PVS в файловой группе [VersionStoreFG]To enable ADR and specify that the PVS should be stored in the [VersionStoreFG] filegroup

Перед запуском этого скрипта создайте файловую группу.Before running this script, create the filegroup.

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
(PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG])

Отключение функции ADRTo disable the ADR feature

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO

Даже после отключения функции ADR в постоянном хранилище версий будут храниться версии, которые по-прежнему требуются системе для логической отмены.Even after the ADR feature is disabled, there will be versions stored in the persistent version store that are still needed by the system for logical revert.

Перемещение PVS в другую файловую группуChange the location of the PVS to a different filegroup

PVS может потребоваться переместить в другую файловую группу по тем или иным причинам.You may need to move the location of the PVS to a different filegroup for a variety of reasons. Например, для PVS может потребоваться больше места или более быстрое хранилище.For example, PVS may require more space, or faster storage.

Перемещение PVS выполняется в три этапа.Changing the location of the PVS is a three-step process.

  1. Отключите функцию ADR.Turn the ADR feature off.

    ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
    GO
    
  2. Подождите, пока все версии, хранящиеся в PVS, можно будет освободить.Wait until all of the versions stored in the PVS can be freed

    Чтобы можно было включить ADR с новым расположением постоянного хранилища версий, сначала необходимо убедиться в том, что все сведения о версиях были удалены из предыдущего расположения PVS.In order to be able to turn on ADR with a new location for the persistent version store, you must first make sure that all of the version information has been purged from the previous PVS location. Чтобы произвести очистку принудительно, выполните следующую команду:In order to force that cleanup to happen, run the command:

    EXEC sys.sp_persistent_version_cleanup [database name]
    

    Хранимая процедура sys.sp_persistent_version_cleanup является синхронной, то есть она не будет завершена до тех пор, пока все сведения о версиях не будут удалены из текущего хранилища PVS.sys.sp_persistent_version_cleanup stored procedure is synchronous, meaning that it will not complete until all version information is cleaned up from the current PVS. После завершения ее выполнения можно проверить, действительно ли сведения о версиях были удалены, запросив динамическое административное представление sys.dm_persistent_version_store_stats и проверив значение persistent_version_store_size_kb.Once it completes, you can verify that the version information is indeed removed by querying the DMV sys.dm_persistent_version_store_stats and examining the value of 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 в новой файловой группе.When the value of persistent_version_store_size_kb is 0, you can re-enable the ADR feature, configuring the PVS to be located in the new filegroup.

  3. Включение ADR с указанием нового расположения PVSTurn on ADR specifying the new location for PVS

    ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
    (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG])
    

Устранение неполадокTroubleshooting

Примечание

Этот раздел относится также к базе данных Azure SQL.This section also applies to Azure SQL Database.

Выполните запрос к sys.dm_tran_persistent_version_store_stats, чтобы проверить размер PVS.Query sys.dm_tran_persistent_version_store_stats to check PVS sizes.

Проверьте размер % of DB.Check % of DB size. Также обратите внимание на отличие от обычного размера.Also note the difference from typical size.

Хранилище PVS считается большим, если его размер значительно больше базового уровня или близок к 50 % от размера базы данных.PVS is considered large if it's significantly larger than baseline or if it is close to 50% of the size of the database.

  1. Получите oldest_active_transaction_id и проверьте, была ли эта транзакция активна в течение длительного времени, выполнив запрос к sys.dm_tran_database_transactions по идентификатору транзакции.Retrieve oldest_active_transaction_id and check whether this transaction has been active for a really long time by querying sys.dm_tran_database_transactions based on the transaction ID.

    Активные транзакции препятствуют очистке PVS.Active transactions prevent cleaning up PVS.

  2. Если база данных входит в группу доступности, проверьте значение secondary_low_water_mark.If the database is part of an availability group, check the secondary_low_water_mark. Оно аналогично значению low_water_mark_for_ghosts, сообщаемому sys.dm_hadr_database_replica_states.This is the same as the low_water_mark_for_ghosts reported by sys.dm_hadr_database_replica_states. Выполните запрос к sys.dm_hadr_database_replica_states, чтобы определить, блокирует ли одна из реплик это значение, так как это также предотвратит очистку PVS.Query sys.dm_hadr_database_replica_states to see whether one of the replicas is holding this value behind, since this will also prevent PVS cleanup.

  3. Проверьте значение min_transaction_timestamp (или online_index_min_transaction_timestamp, если блокировка производится активным хранилищем PVS) и в соответствии с результатом проверьте значение sys.dm_tran_active_snapshot_database_transactions для столбца transaction_sequence_num, чтобы определить сеанс, в котором содержится старая транзакция моментального снимка, блокирующая очистку PVS.Check min_transaction_timestamp (or online_index_min_transaction_timestamp if the online PVS is holding up) and based on that check sys.dm_tran_active_snapshot_database_transactions for the column transaction_sequence_num to find the session that has the old snapshot transaction holding up PVS cleanup.

  4. Если ни одна из указанных выше проверок не дала результата, значит, очистка блокируется аварийно завершенными транзакциями.If none of the above applies, then it means that the cleanup is held by aborted transactions. Проверьте последнее время aborted_version_cleaner_last_start_time и aborted_version_cleaner_last_end_time, чтобы узнать, завершилась ли очистка аварийно завершенных транзакций.Check the last time the aborted_version_cleaner_last_start_time and aborted_version_cleaner_last_end_time to see if the aborted transaction cleanup has completed. После очистки аварийно завершенных транзакций значение oldest_aborted_transaction_id должно быть больше.The oldest_aborted_transaction_id should be moving higher after the aborted transaction cleanup completes.

  5. Если аварийно завершенная транзакция не была успешно выполнена недавно, проверьте наличие сообщений о проблемах VersionCleaner в журнале ошибок.If the aborted transaction hasn’t completed successfully recently, check the error log for messages reporting VersionCleaner issues.