sys.sp_persistent_version_cleanup (Transact-SQL)

適用於:SQL Server 2019 (15.x)Azure SQL DatabaseAzure SQL 受控執行個體

手動啟動持續性版本存放區 (PVS) 清除程式,這是加速資料庫復原的關鍵元素(ADR)。 此清除程式會從中止的交易復原 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'

選擇性。 要清除的資料庫名稱。 如果未提供,請使用目前的資料庫內容。 @dbname為 sysname,預設值為 NULL

[ @scanallpages = ] scanallpages

選擇性。 @scanallpages為 bit,預設值為 0。 當設定為 1時,此選項會強制清除所有資料庫頁面,即使未設定版本也一樣。

[ @clean_option = ] clean_option

選擇性。 可能的選項會判斷是否要回收異列 PVS 頁面。 @clean_option為 int,預設值為 0。 此參考通常不需要,因此建議使用預設值 0

描述
0 預設值,未指定任何選項
1 關閉數據列版本存放區,而不檢查個別 PVS 頁面內容
2 已流覽每個 PVS 頁面的 off-row 版本存放區
3 僅限數據列版本存放區
4 僅限內部使用

傳回碼值

0 (成功)或 1 (失敗)。

結果集

無。

權限

需要 ALTER DATABASE 許可權才能執行。

備註

預存程式是同步的 sys.sp_persistent_version_cleanup ,這表示在從目前的 PVS 清除所有版本資訊之前,它才會完成。

在 SQL Server 2019 (15.x)中,PVS 清除程式一次只會針對一個資料庫執行。 在 Azure SQL 資料庫 和 Azure SQL 受控執行個體 中,從 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;