가속 데이터베이스 복구

적용 대상: SQL Server 2019(15.x) 이상 버전 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

ADR(가속 데이터베이스 복구)은 특히 장기 실행 트랜잭션이 있는 경우 SQL 데이터베이스 엔진 복구 프로세스를 다시 설계하여 데이터베이스 가용성을 향상시킵니다.

ADR은 SQL Server 2019(15.x)에서 도입되었으며 SQL Server 2022(16.x)에서 개선되었습니다. Azure SQL Database, Azure SQL Managed Instance 및 Azure Synapse SQL의 데이터베이스에도 ADR을 사용할 수 있습니다. ADR은 SQL Database 및 SQL Managed Instance에서 기본적으로 사용하도록 설정되며 사용하지 않도록 설정할 수 없습니다. Azure SQL의 ADR에 대한 자세한 내용은 Azure SQL 가속 데이터베이스 복구를 참조하세요.

이 문서에서는 ADR 기능에 대한 개요를 제공합니다. ADR을 사용하려면 가속화된 데이터베이스 복구 관리를 검토합니다.

개요

ADR의 주요 이점은 다음과 같습니다.

  • 빠르고 일관된 데이터베이스 복구

    ADR을 사용하면 장기 실행 트랜잭션이 전체 복구 시간에 영향을 주지 않으므로 시스템의 활성 트랜잭션 수 또는 크기에 관계없이 빠르고 일관된 데이터베이스 복구를 사용할 수 있습니다.

  • 즉각적인 트랜잭션 롤백

    ADR을 사용하면 트랜잭션이 활성 상태인 시간 또는 수행된 업데이트 수와 관계없이 트랜잭션 롤백이 즉시 수행됩니다.

  • 적극적인 로그 잘림

    ADR을 사용하면 활성 장기 실행 트랜잭션이 있는 경우에도 트랜잭션 로그가 적극적으로 잘리고 제어를 사용할 수 없게 됩니다.

현재 데이터베이스 복구 프로세스

ADR이 없으면 SQL Server의 데이터베이스 복구는 ARIES 복구 모델을 따르고 다음 다이어그램에 설명된 세 단계로 구성되며 다이어그램 다음에 자세히 설명되어 있습니다.

Diagram of current recovery process.

  • 분석 단계

    SQL Server는 마지막으로 성공한 검사포인트(또는 가장 오래된 더티 페이지 LSN)부터 끝까지 트랜잭션 로그의 정방향 검사를 수행하여 SQL Server가 중지된 시점의 각 트랜잭션 상태를 확인합니다.

  • 다시 실행 단계

    SQL Server는 커밋되지 않은 가장 오래된 트랜잭션에서 종료될 때까지 트랜잭션 로그의 정방향 검사를 수행하여 커밋된 모든 작업을 다시 실행하여 크래시 당시의 상태로 데이터베이스를 가져옵니다.

  • 실행 취소 단계

    크래시 당시 활성 상태였던 각 트랜잭션에 대해 SQL Server는 로그를 뒤로 트래버스하여 이 트랜잭션이 수행한 작업을 실행 취소합니다.

이 설계에 따라 데이터베이스 엔진이 예기치 않은 다시 시작에서 복구하는 데 걸리는 시간은 크래시 시 시스템에서 가장 긴 활성 트랜잭션 크기에 비례합니다. 복구하려면 불완전한 모든 트랜잭션을 롤백해야 합니다. 필요한 시간은 트랜잭션이 수행한 작업과 트랜잭션이 활성화된 시간에 비례합니다. 따라서 SQL Server 복구 프로세스는 장기 실행 트랜잭션(예: 대규모 대량 삽입 작업 또는 큰 테이블에 대한 인덱스 빌드 작업)이 있는 경우 시간이 오래 걸릴 수 있습니다.

또한 이전에 설명한 것과 동일한 실행 취소 복구 단계를 사용하므로 이 디자인에 기반한 큰 트랜잭션을 취소하거나 롤백하는 데 시간이 오래 걸릴 수 있습니다.

또한 복구 및 롤백 프로세스에 해당 로그 레코드가 필요하기 때문에 장기 실행 트랜잭션이 있는 경우 데이터베이스 엔진에서 트랜잭션 로그를 잘라낼 수 없습니다. 결과적으로 일부 트랜잭션 로그는 매우 커지고 엄청난 양의 드라이브 공간을 사용합니다.

가속화된 데이터베이스 복구 프로세스

ADR은 데이터베이스 엔진 복구 프로세스를 다음과 같이 완전히 다시 디자인하여 이전 문제를 해결합니다.

  • 가장 오래된 활성 트랜잭션의 시작 부분에서 로그를 검색할 필요가 없도록 하여 시간/인스턴트를 일정하게 만듭니다. ADR을 사용하면 트랜잭션 로그는 마지막으로 성공한 검사포인트(또는 가장 오래된 더티 LSN(페이지 로그 시퀀스 번호)에서만 처리됩니다. 따라서 복구 시간은 장기 실행 트랜잭션의 영향을 받지 않습니다.
  • 전체 트랜잭션에 대한 로그를 더 이상 처리할 필요가 없으므로 필요한 트랜잭션 로그 공간을 최소화합니다. 따라서 검사포인트 및 백업이 수행되면 트랜잭션 로그를 적극적으로 잘라낼 수 있습니다.

높은 수준에서 ADR은 모든 물리적 데이터베이스 수정 사항의 버전 관리 및 논리 작업만 실행 취소하여 빠른 데이터베이스 복구를 달성합니다. 이 작업은 제한되며 거의 즉시 실행 취소할 수 있습니다. 크래시 당시 활성 상태였던 모든 트랜잭션은 중단된 것으로 표시되므로 이러한 트랜잭션에서 생성된 모든 버전은 동시 사용자 쿼리에서 무시될 수 있습니다.

ADR 복구 프로세스는 현재 복구 프로세스와 동일한 3단계로 이루어져 있습니다. 이러한 단계가 ADR로 작동하는 방식은 다음 다이어그램에 나와 있습니다.

Diagram of ADR recovery process.

  • 분석 단계

    SLOG(시스템 로그 스트림)를 재구성하고 변환되지 않은 작업에 대한 로그 레코드를 복사하는 작업이 추가되면서 이 프로세스는 현재와 동일하게 기본.

  • 다시 실행 단계

    두 하위 단계로 나뉩니다.

    • 하위 단계 1

      SLOG(마지막 검사점까지 가장 오래된 커밋되지 않은 트랜잭션)에서 다시 실행합니다. 다시 실행은 SLOG에서 몇 개의 레코드만 처리하면 되므로 빠른 작업입니다.

    • 하위 단계 2

      트랜잭션 로그에서 다시 실행은 마지막 검사점(커밋되지 않은 가장 오래된 트랜잭션 대신)에서 시작됩니다.

  • 실행 취소 단계

    ADR을 사용한 실행 취소 단계는 SLOG를 사용하여 비버전 작업 및 PVS(지속형 버전 저장소)를 논리 되돌리기 실행 취소하여 행 수준 버전 기반 실행 취소를 수행하여 거의 즉시 완료됩니다.

가속화된 데이터베이스 복구에 대해 설명하는 8분 분량의 다음 동영상을 시청할 수도 있습니다.

ADR 복구 구성 요소

ADR의 네 가지 주요 구성 요소는 다음과 같습니다.

  • PVS(지속형 버전 저장소)

    지속형 버전 저장소는 기존 tempdb 버전 저장소 대신 데이터베이스 자체에서 생성된 행 버전을 유지하기 위한 데이터베이스 엔진 메커니즘입니다. PVS는 리소스 격리를 가능하게 하고 읽을 수 있는 보조 복제본의 가용성을 향상시킵니다. SQL Server 2019(15.x)에는 인스턴스당 하나의 PVS 스레드가 있습니다. SQL Server 2022(16.x)부터 SQL Server에는 데이터베이스당 하나의 PVS 클린er 스레드가 있습니다.

  • 논리적 되돌리기

    논리 되돌리기 행 수준 버전 기반 실행 취소를 수행하는 비동기 프로세스로, 버전이 지정된 모든 작업에 대해 즉시 트랜잭션 롤백 및 실행 취소를 제공합니다.

    • 중단된 모든 트랜잭션을 추적합니다.
    • 모든 사용자 트랜잭션에 대해 PVS를 사용하여 롤백 수행
    • 트랜잭션이 중단된 직후 모든 잠금을 해제합니다.
  • SLOG

    SLOG는 변환되지 않은 작업(예: 메타데이터 캐시 무효화, 잠금 획득 등)에 대한 로그 레코드를 저장하는 보조 메모리 내 로그 스트림입니다. SLOG 다음과 같습니다.

    • 낮은 볼륨 및 메모리 내
    • 검사point 프로세스 중에 직렬화되어 디스크에 유지됨
    • 트랜잭션 커밋으로 주기적으로 잘림
    • 변환되지 않은 작업만 처리하여 다시 실행 및 실행 취소를 가속화합니다.
    • 필요한 로그 레코드만 유지하여 적극적인 트랜잭션 로그 잘림을 사용하도록 설정합니다.
  • 클리너

    클린er는 주기적으로 절전 모드를 해제하고 PVS에서 사용되지 않는 행 버전을 클린 비동기 프로세스입니다.

SQL Server 2022의 ADR 개선 사항(16.x)

PVS(영구 버전 저장소) 스토리지를 해결하고 전반적인 스케일링 성능을 개선하기 위해 몇 가지 개선 사항이 있습니다. SQL Server 2022(16.x)의 새로운 기능에 대한 자세한 내용은 SQL Server 2022(16.x)의 새로운 기능을 참조하세요.

  • 사용자 트랜잭션 정리

    잠금 오류로 인해 일반 프로세스에서 클린 수 없는 페이지 지우기

    이 기능을 사용하면 사용자 트랜잭션이 테이블 수준 잠금 충돌로 인해 일반 클린up 프로세스에서 해결할 수 없는 페이지에서 클린up을 실행할 수 있습니다. 이러한 개선은 사용자 워크로드가 테이블 수준 잠금을 획득할 수 없기 때문에 ADR 클린up 프로세스가 무기한 실패하지 않도록 하는 데 도움이 됩니다.

  • PVS 페이지 추적기 메모리 공간 감소

    이 향상된 기능은 버전 관리 페이지를 유지하는 데 필요한 메모리 공간을 줄이기 위해 익스텐트 수준에서 PVS(지속형 버전 저장소) 페이지를 추적합니다.

  • ADR(가속 데이터 복구) 클리너 개선 사항

    ADR(가속 데이터 복구) 클리너는 SQL Server가 중단된 버전의 페이지를 추적하고 기록하는 방법을 개선하기 위해 버전 정리 효율성을 개선하였으며 그 결과 메모리 및 용량이 향상되었습니다.

  • 트랜잭션 수준 PVS(지속형 버전 저장소)

    이 향상된 기능을 통해 ADR은 시스템 내에 중단된 트랜잭션이 있는지 여부에 관계없이 커밋된 트랜잭션에 속한 버전을 정리할 수 있습니다. 이 향상된 PVS(지속형 버전 저장소) 페이지는 중단된 트랜잭션 맵을 자르기 위해 클린 완료할 수 없는 경우에도 할당을 취소할 수 있습니다.

    이러한 개선에 따른 결과로, ADR 정리가 느리거나 실패하더라도 PVS(지속형 버전 저장소) 증가가 줄어듭니다.

  • 다중 스레드 버전 정리

    SQL Server 2019(15.x)에서 정리 프로세스는 SQL Server 인스턴스 내에서 단일 스레드입니다.

    SQL Server 2022(16.x)부터 이 프로세스는 다중 스레드 버전 클린up을 사용합니다. 이렇게 하면 동일한 SQL Server 인스턴스의 여러 데이터베이스를 병렬로 클린 수 있습니다. 이러한 개선은 여러 개의 큰 데이터베이스가 있는 경우에 유용합니다.

    버전 클린업 확장성에 대한 스레드 수를 조정하려면 로 sp_configure설정합니다ADR Cleaner Thread Count. 스레드 수는 인스턴스의 코어 수로 제한됩니다.

    가장 좋은 방법은 데이터베이스 수와 동일한 수의 ADR 클린er 스레드를 사용하는 것이 좋습니다. 예를 들어 두 개의 데이터베이스가 있는 SQL Server 인스턴스에 있도록 4 구성하는 ADR Cleaner Thread Count 경우 ADR 클린er는 데이터베이스당 하나의 스레드만 할당하므로 다시 두 개의 스레드를 유휴 상태로 기본.

    아래 예제에서는 스레드 수를 다음과 같이 4변경합니다.

    EXEC sp_configure 'ADR Cleaner Thread Count', '4';
    RECONFIGURE WITH OVERRIDE; 
    
  • 새 확장 이벤트

    ADR PVS 다중 스레드 버전 클린er에서 원격 분석을 위해 새 확장 이벤트가 tx_mtvc2_sweep_stats추가되었습니다.

모범 사례 및 지침

ADR에 권장되지 않는 워크로드에 대한 지침은 가속화된 데이터베이스 복구 관리를 참조하세요.

Important

Azure SQL Database에서는 유휴 트랜잭션(6시간 동안 트랜잭션 로그에 기록되지 않은 트랜잭션)이 자동으로 종료되어 리소스를 확보합니다.