다음을 통해 공유


가속 데이터베이스 복구

적용 대상: SQL Server 2019(15.x) 이후 버전 Azure SQL Database Azure SQL Managed Instance Azure 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을 사용할 수 있습니다. SQL Database 및 SQL Managed Instance에서는 ADR이 기본적으로 사용되며, 사용하지 않도록 설정할 수 없습니다. Azure SQL의 ADR에 대한 자세한 내용은 Azure SQL 가속 데이터베이스 복구를 참조하세요.

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

개요

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

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

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

  • 즉각적인 트랜잭션 롤백

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

  • 적극적인 로그 자르기

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

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

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

현재 복구 프로세스의 다이어그램입니다.

  • 분석 단계

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

  • 다시 실행 단계

    SQL Server는 커밋되지 않은 가장 오래된 트랜잭션에서 끝까지 트랜잭션 로그에 대한 포워드 스캔을 수행하여 커밋된 모든 작업을 다시 실행하여 크래시 당시의 상태로 데이터베이스를 가져옵니다.

  • 실행 취소 단계

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

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

또한 위에서 설명한 것과 동일한 복구 취소 단계를 사용하므로 이 디자인에 따라 큰 트랜잭션을 취소/롤백하는 데 시간이 오래 걸릴 수 있습니다.

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

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

ADR은 데이터베이스 엔진 복구 프로세스를 다음으로 완전히 다시 설계하여 이전에 언급한 문제를 해결합니다.

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

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

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

ADR 복구 프로세스의 다이어그램입니다.

  • 분석 단계

    이 프로세스는 현재와 동일하며, 버전이 없는 작업의 경우 SLOG(시스템 로그 스트림)를 다시 작성하고 로그 레코드를 복사하는 단계가 추가되었습니다.

  • 다시 실행 단계

    두 하위 단계로 나뉩니다.

    • 하위 단계 1

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

    • 하위 단계 2

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

  • 실행 취소 단계

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

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

ADR 복구 구성 요소

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

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

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

  • 논리적 되돌리기

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

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

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

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

    클리너는 정기적으로 절전 모드를 해제하고 필요하지 않은 행 버전을 정리하는 비동기 프로세스입니다.

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

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

  • 사용자 트랜잭션 정리

    잠금 오류로 인해 일반 프로세스에서 정리할 수 없는 페이지를 지웁니다.

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

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

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

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

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

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

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

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

  • 다중 스레드 버전 정리

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

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

    버전 정리 확장성을 위해 스레드 수를 조정하려면 ADR Cleaner Thread Countsp_configure로 설정합니다. 스레드 수는 인스턴스의 코어 수로 제한됩니다.

    모범 사례로 데이터베이스 수와 동일한 수의 ADR 클리너 스레드를 사용하는 것이 좋습니다. 예를 들어 ADR Cleaner Thread Count를 두 개의 데이터베이스가 있는 SQL Server 인스턴스에 4로 구성하는 경우 ADR 클리너는 데이터베이스당 하나의 스레드만 할당하므로 나머지 두 스레드는 유휴 상태로 유지됩니다.

    아래 예제에서는 스레드 수를 4로 변경합니다.

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

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

모범 사례 및 지침

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

Important

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