sys.sp_persistent_version_cleanup (Transact-SQL)

Platí pro: SQL Server 2019 (15.x) a novější verze Databáze Azure SQL DatabaseAzure SQL Managed InstanceSQL v Microsoft Fabric

Ruční spuštění procesu vyčištění trvalého úložiště verzí (PVS), klíčového prvku akcelerované obnovení databáze (ADR). Čistič odebere zastaralé verze řádků z úložiště PVS v řádku a mimo řádek a také odebere nepotvrzené změny v PVS z přerušených transakcí.

Obvykle není nutné spustit proces čištění PVS ručně pomocí sys.sp_persistent_version_cleanup. V některých scénářích ale můžete chtít proces čištění PVS zahájit ručně během známé doby nečinnosti nebo obnovení po zaneprázdněné aktivitě OLTP.

Další informace o ADR naleznete v tématu akcelerované obnovení databáze.

Transact-SQL konvence syntaxe

Syntax

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

Argumenty

[ @dbname = ] N'dbname'

Volitelný. Název databáze, která se má vyčistit. Pokud není zadaný, použije aktuální kontext databáze. @dbname je sysname , s výchozím NULL.

[ @scanallpages = ] scanallpages

Volitelný. @scanallpages je bit, s výchozím 0. Pokud je tato možnost nastavená na 1, vynutí vyčištění všech databázových stránek, i když není verze.

[ @clean_option = ] clean_option

Volitelný. Možnost určit typ vyčištění, který se má provést. @clean_option je int s výchozím 0. Tento parametr není běžně potřeba a doporučuje se výchozí hodnota 0 .

Hodnota Popis
0 Ve výchozím nastavení proveďte všechny vyčištění.
1 Vyčistěte úložiště verzí mimo řádek bez zkoumání obsahu stránky PVS. Rychlejší, ale může přeskočit přidělení nepoužívaných stránek v PVS. Toto je výchozí chování, pokud @clean_option je vynecháno nebo nastaveno na 0.
2 Vyčistěte úložiště verzí mimo řádek kontrolou obsahu jednotlivých stránek PVS. Pomalejší, ale vždy uvolní všechny nepoužité stránky.
3 Vyčistěte pouze úložiště verze v řádku.
4 Vyčistěte verze řádků generované pouze přerušenými transakcemi (označované také jako logická revert).

Návratové hodnoty kódu

0 (úspěch) nebo 1 (selhání).

Sada výsledků

Žádný.

Dovolení

Vyžaduje oprávnění ALTER k databázi.

Poznámky

sys.sp_persistent_version_cleanup uložená procedura je synchronní, což znamená, že se nedokončí, dokud se všechny informace o verzi nevyčistí z aktuálního pvS.

V SQL Serveru 2019 (15.x) se proces čištění PVS spustí jenom pro jednu databázi najednou. V Azure SQL Database a Azure SQL Managed Instance a počínaje SQL Serverem 2022 (16.x) se proces čištění PVS může paralelně spouštět s více databázemi ve stejné instanci.

Pokud je proces čištění PVS již spuštěn proti požadované databázi, tato uložená procedura je blokována před spuštěním jiného procesu čištění PVS. Aktivní dlouhotrvající transakce v jakékoli databázi ve stejné instanci databázového stroje, která má povolenou službu ADR, může také blokovat vyčištění PVS.

Pomocí následujícího ukázkového dotazu můžete monitorovat úlohu čištění verzí:

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

Aktivní transakce může zabránit spuštění procesu čištění PVS. Pokud k tomu dojde, relace spuštěná sys.sp_persistent_version_cleanup uložená procedura čeká s typem čekání PVS_CLEANUP_LOCK. Můžete počkat na dokončení transakce, nebo můžete zvážit ukončení relace blokování aktivní transakce, pokud je to možné.

Vyčištění PVS iniciované pomocí sys.sp_persistent_version_cleanup může trvat déle, když je povolena automatická komprimace indexu . Pokud potřebujete urychlit vyčištění PVS iniciované touto uloženou procedurou, zvažte dočasné zakázání automatického komprimace indexu.

Pokud je služba ADR zakázaná, spusťte sys.sp_persistent_version_cleanup a vyčistíte předchozí verze i nadále v pvs.

Příklady

Pokud chcete proces čištění PVS aktivovat ručně mezi úlohami nebo během údržby, použijte následující ukázkový skript:

EXECUTE sys.sp_persistent_version_cleanup [database_name];

Například:

EXECUTE sys.sp_persistent_version_cleanup [WideWorldImporters];

Nebo předpokládejme aktuální kontext databáze:

USE [WideWorldImporters];
GO

EXECUTE sys.sp_persistent_version_cleanup;