sys.sp_persistent_version_cleanup (Transact-SQL)

適用対象: SQL Server 2019 (15.x) Azure SQL Database Azure SQL Managed Instance

高速データベース復旧 (ADR) の重要な要素である永続バージョン ストア (PVS) クリーンアップ プロセスを手動で開始します。 このクリーナーは、中止されたトランザクションから PVS のコミットされていないデータをロールバックします。

通常、 sys.sp_persistent_version_cleanupを使用して PVS クリーンアップ プロセスを手動で開始する必要はありません。 ただし、一部のシナリオでは、ビジー状態の OLTP アクティビティの後の既知の保存/回復期間に、PVS クリーンアップ プロセスを手動で開始することが必要になる場合があります。

Azure SQL の ADR の詳細については、「Azure SQL での高速データベース復旧」を参照してください。

Transact-SQL 構文表記規則

構文

sp_persistent_version_cleanup
    [ [ @dbname = ] N'dbname' ]
    [ , [ @scanallpages = ] scanallpages ]
    [ , [ @clean_option = ] clean_option ]
[ ; ]

引数

[ @dbname = ] N'dbname'

省略可能。 クリーンアップするデータベースの名前。 指定しない場合は、現在のデータベース コンテキストを使用します。 @dbnamesysname で、既定値は NULL です。

[ @scanallpages = ] scanallpages

省略可能。 @scanallpagesbit で、既定値は 0 です。 1に設定すると、バージョン管理されていない場合でも、このオプションによってすべてのデータベース ページが強制的にクリーンアップされます。

[ @clean_option = ] clean_option

省略可能。 使用可能なオプションは、行外 PVS ページを再利用するかどうかを決定します。 @clean_optionint で、既定値は 0 です。 このリファレンスは一般的には必要ありません。既定値 0 することをお勧めします。

Value 説明
0 既定値、オプションが指定されていない
1 個々の PVS ページの内容を確認せずに、行外のバージョン ストア
2 各 PVS ページがアクセスされた行以外のバージョン ストア
3 行内バージョン ストアのみ
4 内部使用のみ

リターン コードの値

0 (成功) または 1 (失敗)。

結果セット

なし。

アクセス許可

実行するには ALTER DATABASE 権限が必要です。

解説

sys.sp_persistent_version_cleanup ストアド プロシージャは同期的です。つまり、すべてのバージョン情報が現在の PVS からクリーンアップされるまで完了しません。

SQL Server 2019 (15.x) では、PVS クリーンアップ プロセスは一度に 1 つのデータベースに対してのみ実行されます。 Azure SQL Database と Azure SQL Managed Instance では、SQL Server 2022 (16.x) 以降では、PVS クリーンアップ プロセスは、同じインスタンス内の複数のデータベースに対して並列で実行できます。

PVS クリーンアップ プロセスが目的のデータベースに対して既に実行されている場合、このストアド プロシージャはブロックされ、完了を待ってから別の PVS クリーンアップ プロセスを開始します。 ADR が有効になっているデータベースで実行時間の長いアクティブなトランザクションでも、PVS のクリーンアップがブロックされる可能性があります。 バージョン クリーナー タスクを監視するには、次のサンプル クエリを使用してプロセスを探します。

SELECT *
FROM sys.dm_exec_requests
WHERE command LIKE '%PERSISTED_VERSION_CLEANER%';

制限事項

ADR が有効になっているデータベース、または永続化されたバージョン ストア (PVS) にバージョンが残っているデータベースには、データベース ミラーリングを設定できません。 ADR が無効になっている場合は、 sys.sp_persistent_version_cleanup 実行して、PVS 内の以前のバージョンをクリーンアップします。

ワークロード間またはメンテナンス期間中に PVS クリーンアップ プロセスを手動でアクティブ化するには、次のサンプル スクリプトを使用します。

EXEC sys.sp_persistent_version_cleanup [database_name];

次に例を示します。

EXEC sys.sp_persistent_version_cleanup [WideWorldImporters];

または、現在のデータベース コンテキストを想定する場合:

USE [WideWorldImporters];
GO
EXEC sys.sp_persistent_version_cleanup;