Bagikan melalui


sys.sp_persistent_version_cleanup (T-SQL)

Berlaku untuk: SQL Server 2019 (15.x) dan versi yang lebih baru database Azure SQL DatabaseAzure SQL Managed InstanceSQL di Microsoft Fabric

Memulai proses pembersihan penyimpanan versi persisten (PVS) secara manual, elemen kunci pemulihan database yang dipercepat (ADR). Pembersih ini juga menghapus data yang tidak dikomit dalam PVS dari transaksi yang dibatalkan.

Biasanya tidak perlu memulai proses pembersihan PVS secara manual menggunakan sys.sp_persistent_version_cleanup. Namun dalam beberapa skenario, Anda mungkin ingin memulai proses pembersihan PVS secara manual selama periode istirahat/pemulihan yang diketahui setelah aktivitas OLTP yang sibuk.

Untuk informasi selengkapnya tentang ADR, lihat Pemulihan database yang dipercepat.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

[ @dbname = ] N'dbname'

Opsional. Nama database yang akan dibersihkan. Jika tidak disediakan, menggunakan konteks database saat ini. @dbname adalah sysname, dengan default NULL.

[ @scanallpages = ] scanallpages

Opsional. @scanallpages adalah bit, dengan default 0. Saat diatur ke 1, opsi ini memaksa pembersihan semua halaman database bahkan jika tidak diberi versi.

[ @clean_option = ] clean_option

Opsional. Opsi yang mungkin menentukan apakah akan mengklaim kembali halaman PVS di luar baris atau tidak. @clean_option int, dengan default 0. Referensi ini umumnya tidak diperlukan dan nilai 0 default disarankan.

Nilai Deskripsi
0 Default, tidak ada opsi yang ditentukan
1 penyimpanan versi di luar baris tanpa memeriksa konten halaman PVS individual
2 penyimpanan versi di luar baris dengan setiap halaman PVS yang dikunjungi
3 hanya penyimpanan versi dalam baris
4 penggunaan internal saja

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Tataan hasil

Tidak ada.

Izin

Memerlukan izin ALTER pada database.

Keterangan

Prosedur sys.sp_persistent_version_cleanup tersimpan sinkron, yang berarti tidak selesai sampai semua informasi versi dibersihkan dari PVS saat ini.

Di SQL Server 2019 (15.x), proses pembersihan PVS hanya dijalankan untuk satu database pada satu waktu. Di Azure SQL Database dan Azure SQL Managed Instance, dan dimulai dengan SQL Server 2022 (16.x), proses pembersihan PVS dapat dijalankan secara paralel terhadap beberapa database dalam instans yang sama.

Jika proses pembersihan PVS sudah berjalan terhadap database yang diinginkan, prosedur tersimpan ini diblokir sebelum memulai proses pembersihan PVS lain. Transaksi aktif dan berjalan lama dalam database apa pun pada instans mesin database yang sama yang mengaktifkan ADR juga dapat memblokir pembersihan PVS.

Anda dapat memantau tugas pembersih versi dengan mencari prosesnya dengan kueri sampel berikut:

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

Transaksi aktif mungkin mencegah proses pembersihan PVS dimulai. Jika ini terjadi, sesi yang menjalankan prosedur tersimpan sys.sp_persistent_version_cleanup menunggu dengan jenis tunggu PVS_CLEANUP_LOCK. Anda dapat menunggu transaksi selesai, atau Anda dapat mempertimbangkan untuk membunuh sesi pemblokir dengan transaksi aktif, jika memungkinkan.

Jika ADR dinonaktifkan, jalankan sys.sp_persistent_version_cleanup untuk membersihkan versi sebelumnya yang masih ada di PVS.

Contoh

Untuk mengaktifkan proses pembersihan PVS secara manual antara beban kerja atau selama jendela pemeliharaan, gunakan contoh skrip berikut:

EXECUTE sys.sp_persistent_version_cleanup [database_name];

Contohnya:

EXECUTE sys.sp_persistent_version_cleanup [WideWorldImporters];

Atau, untuk mengasumsikan konteks database saat ini:

USE [WideWorldImporters];
GO

EXECUTE sys.sp_persistent_version_cleanup;