sys.sp_persistent_version_cleanup (Transact-SQL)
適用於:SQL Server 2019 (15.x) Azure SQL 資料庫 Azure SQL 受控執行個體
手動啟動持續性版本存放區 (PVS) 清除程式,這是加速資料庫復原的關鍵元素(ADR)。 此清除程式會從中止的交易復原 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
。
值 | Description |
---|---|
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;