이 문서에는 SQL Server 2019(15.x) 이후 버전에 대한 ADR(가속 데이터베이스 복구)을 관리하고 구성하는 모범 사례에 대한 정보가 포함되어 있습니다. Azure SQL의 ADR에 대한 자세한 내용은 Azure SQL 가속 데이터베이스 복구를 참조하세요.
참고
Azure SQL 데이터베이스 및 Azure SQL Managed Instance에서 ADR(가속 데이터베이스 복구)은 모든 데이터베이스에서 사용하도록 설정되며 사용하지 않도록 설정할 수 없습니다. 스토리지 사용량, 높은 중단 트랜잭션 및 기타 요인에 문제가 있는 경우 가속 데이터베이스 복구 문제 해결을 검토하거나 Azure 지원에 문의하세요.
가속 데이터베이스 복구를 고려해야 하는 경우
많은 고객은 ADR(가속 데이터베이스 복구)이 복구 시간을 개선하는 데 중요한 기술이라고 여깁니다. ADR을 사용해야 하는 데이터베이스를 결정하기 전에 아래 요인의 누적을 고려해야 하며, 아래의 요인을 평가하여 요인 누적이 ADR 사용에 유리 또는 불리한지 판단해야 합니다.
ADR은 장기 실행 트랜잭션이 있는 워크로드에 권장됩니다. 예를 들어 장기 실행 트랜잭션이 롤백될 위험이 있는 경우 ADR이 도움이 될 수 있습니다.
ADR은 활성 트랜잭션으로 인해 트랜잭션 로그가 크게 증가하는 경우를 본 워크로드에 권장됩니다.
ADR은 SQL Server 장기 실행 복구(예: 예기치 않은 SQL Server 다시 시작 또는 수동 트랜잭션 롤백)로 인해 장기간 데이터베이스를 사용하지 못한 경험이 있는 워크로드에 권장됩니다.
데이터베이스 미러링에 등록된 데이터베이스에는 ADR이 지원되지 않습니다.
ADR은 단일 스레드 PVS(영구 버전 저장소) 버전 클리너 때문에 100테라바이트보다 큰 데이터베이스에는 사용하지 않는 것이 좋습니다.
애플리케이션이 행 액세스/삽입이 발생할 때마다 레코드를 업데이트하는 등 일괄 처리되지 않는 여러 증분 업데이트를 수행하는 경우 워크로드가 ADR에 적합하지 않을 수 있습니다. 가능한 경우 명령이 끝날 때까지 애플리케이션 쿼리를 일괄 업데이트로 다시 작성하고 많은 수의 소규모 업데이트 트랜잭션을 줄이는 것이 좋습니다.
워크로드가 ADR에 적합한지 평가
워크로드에서 ADR을 사용하도록 설정한 후에는 PVS(영구 버전 저장소)를 따라갈 수 없음을 나타내는 징후를 찾습니다. 가속화된 데이터베이스 복구 문제 해결에 있는 방법을 사용하여 ADR 상태를 모니터링하는 것이 좋습니다.
공간을 회수하기 위해 PVS 정리 프로세스에 대한 미사용/복구 기간 없이 업데이트/삭제 횟수가 많은 데이터베이스 환경(예: 대용량 OLTP)에는 ADR을 사용하지 않는 것이 좋습니다. 일반적으로 비즈니스 작업 주기에서는 이 시간이 가능하지만 일부 시나리오에서는 애플리케이션 작업 조건을 활용하기 위해 PVS 정리 프로세스를 수동으로 시작해야 할 수 있습니다.
PVS 정리 프로세스가 장기간 실행되는 경우 중단된 트랜잭션 수가 증가하여 PVS 크기도 증가할 수 있습니다. sys.dm_tran_aborted_transactions DMV를 활용하여 중단된 트랜잭션 수를 보고하고, sys.dm_tran_persistent_version_store_stats를 활용하여 PVS 크기와 함께 정리 시작/종료 시간을 보고합니다. 자세한 내용은 sys.dm_tran_persistent_version_store_stats를 참조하세요.
워크로드 간에 또는 유지 관리 기간 동안 PVS 정리 프로세스를 수동으로 활성화하려면 sys.sp_persistent_version_cleanup을 사용합니다. 자세한 내용은 sys.sp_persistent_version_cleanup을 참조하세요.
SNAPSHOT 또는 READ COMMITTED SNAPSHOT 격리 모드에서 장기 실행 쿼리를 사용하는 워크로드는 다른 데이터베이스에서 ADR PVS 정리를 지연시켜 PVS 파일이 증가할 수 있습니다. 자세한 내용은 가속 데이터베이스 복구 문제 해결의 긴 활성 스냅샷 검사 섹션을 참조하세요. 이는 SQL Server 및 Azure SQL Managed Instance의 인스턴스 또는 Azure SQL Database 탄력적 풀에 적용됩니다.
가속 데이터베이스 복구 모범 사례
이 섹션에는 ADR에 대한 지침 및 권장 사항이 포함되어 있습니다.
SQL Server 경우 PVS 버전 저장소를 고급 SSD 또는 PMEM(영구 메모리)(SCM(스토리지 클래스 메모리)이라고도 함) 같은 상위 계층 스토리지의 파일 그룹으로 격리합니다. 자세한 내용은 PVS의 위치를 다른 파일 그룹으로 변경을 참조하세요. Azure SQL Database 및 Azure SQL Managed Instance에 대해 지원됩니다.
데이터베이스에 PVS 사용을 감안하여 충분한 공간이 있는지 확인합니다. 데이터베이스에 PVS를 확장할 충분한 공간이 없으면 ADR에서 버전을 생성하지 못합니다. ADR은 tempdb 버전 저장소에 비해 버전 저장소 공간을 절약합니다.
데이터베이스에서 장기 실행 트랜잭션을 방지합니다. ADR의 한 가지 목적은 긴 활성 트랜잭션을 다시 실행하여 데이터베이스 복구 속도를 높이는 것이지만 장기 실행 트랜잭션은 버전 정리를 지연시키고 PVS의 크기를 증가시킬 수 있습니다.
데이터 정의 변경 또는 DDL 작업이 포함된 대규모 트랜잭션을 방지합니다. ADR은 SLOG(시스템 로그 스트림) 메커니즘을 사용하여 복구에 사용되는 DDL 작업을 추적합니다. SLOG는 트랜잭션이 활성화된 동안에만 사용됩니다. SLOG는 검사점이므로 SLOG를 사용하는 대규모 트랜잭션을 방지하면 전반적인 성능에 도움이 될 수 있습니다. 이러한 시나리오로 인해 SLOG가 더 많은 공간을 차지할 수 있습니다.
하나의 트랜잭션에서 많은 DDL이 실행됩니다. 예를 들어, 한 트랜잭션에서 임시 테이블을 빠르게 만들기 및 삭제합니다.
테이블에는 수정되는 파티션/인덱스가 매우 많습니다. 예를 들어, 이러한 테이블에 대한 DROP TABLE 작업은 SLOG 메모리를 많이 예약해야 하므로 트랜잭션 로그 잘림이 지연되고 실행 취소/다시 실행 작업이 지연됩니다. 해결 방법은 인덱스를 개별적으로 점진적으로 삭제한 다음 테이블을 삭제하는 것입니다. SLOG에 대한 자세한 내용은 ADR 복구 구성 요소를 참조하세요.
불필요한 중단 상황을 방지하거나 줄입니다. 높은 중단 비율은 PVS 클리너에 부담을 주고 ADR 성능을 낮춥니다. 중단은 높은 비율의 교착 상태, 중복 키 또는 기타 제약 조건 위반으로 인해 발생할 수 있습니다.
sys.dm_tran_aborted_transactions DMV는 SQL Server 인스턴스에서 중단된 모든 트랜잭션을 표시합니다. nested_abort 열은 트랜잭션이 커밋되었지만 PVS 정리 프로세스를 차단할 수 있는 중단된 부분(저장점 또는 중첩 트랜잭션)이 있음을 나타냅니다. 자세한 내용은 sys.dm_tran_aborted_transactions(Transact-SQL)를 참조하세요.
ADR 사용 설정 및 제어
참고
Azure SQL 데이터베이스 및 Azure SQL Managed Instance에서 ADR(가속 데이터베이스 복구)은 모든 데이터베이스에서 사용하도록 설정되며 사용하지 않도록 설정하거나 다른 파일 그룹으로 이동할 수 없습니다.
ADR은 SQL Server 2019(15.x)에서 기본적으로 꺼져 있으며 DDL 구문을 사용하여 제어할 수 있습니다.
ALTER DATABASE [DB] SET ACCELERATED_DATABASE_RECOVERY = {ON | OFF};
이 구문을 사용하여 기능 설정 여부를 제어하고 PVS(영구 버전 저장소) 데이터의 특정 파일 그룹을 지정합니다. 파일 그룹을 지정하지 않으면 PVS가 기본 파일 그룹에 저장됩니다.
이 상태를 변경하려면 데이터베이스에서 배타적 잠금이 필요합니다. 즉, 모든 활성 세션이 사라질 때까지 ALTER DATABASE 명령이 중단되고 새 세션이 ALTER DATABASE 명령 뒤에서 대기합니다. 작업을 완료하고 잠금을 제거하는 것이 중요한 경우 종료 절인 WITH ROLLBACK [IMMEDIATE | AFTER {number} SECONDS | NO_WAIT]를 사용하여 데이터베이스의 활성 세션을 중단합니다. 자세한 내용은 ALTER DATABASE set 옵션을 참조하세요.
영구 버전 저장소 파일 그룹 관리
ADR 기능은 다른 버전의 데이터 요소가 PVS에 유지되는 버전 변경 내용을 기반으로 합니다. PVS가 있는 위치와 PVS에서 데이터의 크기를 관리하는 방법에 대한 고려 사항이 있습니다.
파일 그룹을 지정하지 않고 ADR을 사용하도록 설정하려면
이 작업을 수행하려면 데이터베이스에 대한 단독 액세스 권한이 필요합니다.
ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON;
GO
이 경우 PVS 파일 그룹을 지정 PRIMARY 하지 않으면 파일 그룹은 PVS 데이터를 보유합니다.
ADR을 사용하도록 설정하고 PVS를 파일 그룹에 저장하도록 지정하려면
기본 PRIMARY 파일 그룹을 제외한 다른 파일 그룹을 사용하여 PVS 데이터를 보유하도록 ADR을 구성할 수 있습니다.
파일 PRIMARY그룹에서 ADR을 사용하도록 설정하기 전에 파일 그룹 및 데이터 파일을 만들어야 합니다.
VersionStoreFG 파일 그룹을 만들고 파일 그룹에 새 데이터 파일을 만듭니다. 예시:
ALTER DATABASE [MyDatabase] ADD FILEGROUP [VersionStoreFG];
GO
ALTER DATABASE [MyDatabase] ADD FILE ( NAME = N'VersionStoreFG'
, FILENAME = N'E:\DATA\VersionStore.ndf'
, SIZE = 8192KB , FILEGROWTH = 65536KB )
TO FILEGROUP [VersionStoreFG];
GO
파일 그룹과 보조 데이터 파일을 만든 후에만 ADR을 사용하도록 설정하고 PVS를 특정 파일 그룹에 저장하도록 지정합니다. 이 작업을 수행하려면 데이터베이스에 대한 단독 액세스 권한이 필요합니다.
ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
(PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
기능을 비활성화하려면 다음을 수행합니다
ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO
ADR 기능을 사용하지 않도록 설정된 후에도 논리적 되돌리기를 위해 시스템에 필요한 버전은 영구 버전 저장소에 저장됩니다.
PVS의 위치를 다른 파일 그룹으로 변경
SQL Server에서는 여러 가지 이유로 PVS의 위치를 다른 파일 그룹으로 이동해야 할 수 있습니다. 예를 들어 PVS에는 더 많은 공간 또는 더 빠른 스토리지가 필요할 수 있습니다.
PVS의 위치를 변경하는 과정은 세 단계로 진행됩니다.
ADR 기능을 끕니다.
ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO
PVS에 저장된 모든 버전을 해제할 수 있을 때까지 기다립니다.
영구 버전 저장소에 대한 새 위치로 ADR을 켜려면 먼저 모든 버전 정보가 이전 PVS 위치에서 제거되었는지 확인해야 합니다. 이러한 정리를 강제로 수행하려면 다음 명령을 실행합니다.
sys.sp_persistent_version_cleanup 저장 프로시저는 동기적입니다. 즉, 현재 PVS에서 모든 버전 정보가 정리될 때까지 완료되지 않습니다. 완료되면 DMV sys.dm_tran_persistent_version_store_stats 를 쿼리하고 값을 persistent_version_store_size_kb검사하여 버전 정보가 실제로 제거되었는지 확인할 수 있습니다.
SELECT DB_Name(database_id), persistent_version_store_size_kb
FROM sys.dm_tran_persistent_version_store_stats where database_id = [MyDatabaseID];
persistent_version_store_size_kb의 값이 0이면 ADR 기능을 다시 사용하도록 설정하여 새 파일 그룹에 배치되도록 PVS를 구성합니다.
PVS의 새 위치를 지정하여 ADR을 켭니다.
ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
(PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);