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 での高速データベース復旧」を参照してください。
構文
sp_persistent_version_cleanup
[ [ @dbname = ] N'dbname' ]
[ , [ @scanallpages = ] scanallpages ]
[ , [ @clean_option = ] clean_option ]
[ ; ]
引数
[ @dbname = ] N'dbname'
省略可能。 クリーンアップするデータベースの名前。 指定しない場合は、現在のデータベース コンテキストを使用します。 @dbname は sysname で、既定値は NULL
です。
[ @scanallpages = ] scanallpages
省略可能。 @scanallpages は bit で、既定値は 0
です。 1
に設定すると、バージョン管理されていない場合でも、このオプションによってすべてのデータベース ページが強制的にクリーンアップされます。
[ @clean_option = ] clean_option
省略可能。 使用可能なオプションは、行外 PVS ページを再利用するかどうかを決定します。 @clean_option は int で、既定値は 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;