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 가속 데이터베이스 복구를 참조하세요.
구문
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 기본값0
인 int입니다. 이 참조는 일반적으로 필요하지 않으며 기본값 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;