다음을 통해 공유


sys.sp_persistent_version_cleanup(Transact-SQL)

적용 대상: SQL Server 2019(15.x) Azure SQL 데이터베이스 Azure SQL Managed Instance

ADR(가속 데이터베이스 복구)의 핵심 요소인 PVS(영구 버전 저장소) 정리 프로세스를 수동으로 시작합니다. 이 클리너는 중단된 트랜잭션에서 PVS의 커밋되지 않은 데이터를 롤백합니다.

일반적으로 PVS 정리 프로세스를 수동으로 시작할 sys.sp_persistent_version_cleanup필요는 없습니다. 그러나 일부 시나리오에서는 사용 중인 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 비트이며 기본값은 .입니다0. 이 옵션을 설정 1하면 버전이 지정되지 않은 경우에도 모든 데이터베이스 페이지를 강제로 정리합니다.

[ @clean_option = ] clean_option

선택 사항. 가능한 옵션은 오프행 PVS 페이지를 회수할지 여부를 결정합니다. @clean_option 기본값0int입니다. 이 참조는 일반적으로 필요하지 않으며 기본값 0 을 사용하는 것이 좋습니다.

설명
0 기본값, 옵션이 지정되지 않음
1 개별 PVS 페이지 콘텐츠를 확인하지 않고 행이 없는 버전 저장소
2 각 PVS 페이지를 방문한 행이 없는 버전 저장소
3 행 내 버전 저장소만
4 내부 사용만

반환 코드 값

0(성공) 또는 1(실패).

결과 집합

없음

사용 권한

실행하려면 ALTER DATABASE 권한이 필요합니다.

설명

sys.sp_persistent_version_cleanup 저장 프로시저는 동기적입니다. 즉, 현재 PVS에서 모든 버전 정보가 정리될 때까지 완료되지 않습니다.

SQL Server 2019(15.x)에서 PVS 정리 프로세스는 한 번에 하나의 데이터베이스에 대해서만 실행됩니다. 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;