Azure SQL 내 가속 데이터베이스 복구

적용 대상:Azure SQL DatabaseAzure SQL Managed Instance

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

ADR은 현재 Azure SQL Database, Azure SQL Managed Instance 및 Azure Synapse Analytics 데이터베이스 및 SQL Server 2019로 실행되는 Azure VM의 SQL Server에서 사용할 수 있습니다. SQL Server의 ADR에 대한 자세한 내용은 가속 데이터베이스 복구 관리를 참조하세요.

참고 항목

ADR은 Azure SQL Database 및 Azure SQL Managed Instance에서 기본적으로 사용하도록 설정됩니다. Azure SQL Database 및 Azure SQL Managed Instance에서 ADR을 사용하지 않도록 설정하는 것은 지원되지 않습니다.

개요

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

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

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

  • 즉각적인 트랜잭션 롤백

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

  • 적극적인 로그 자르기

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

표준 데이터베이스 복구 프로세스

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

current recovery process

  • 분석 단계

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

  • 다시 실행 단계

    커밋되지 않은 가장 오래된 트랜잭션에서 끝까지 트랜잭션 로그를 전달하여 커밋된 모든 작업을 다시 실행하여 크래시 당시의 상태로 데이터베이스를 가져옵니다.

  • 실행 취소 단계

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

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

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

뿐만 아니라 장기 실행 트랜잭션이 존재할 경우, SQL 데이터베이스 엔진이 트랜잭션 로그를 자를 수 없습니다. 복구 및 롤백 프로세스에 해당 로그 레코드가 필요하기 때문입니다. 이 SQL 데이터베이스 엔진 설계의 결과로, 일부 고객은 트랜잭션 로그의 크기가 매우 커지고 엄청난 양의 드라이브 공간이 사용되는 문제에 직면하곤 했습니다.

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

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

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

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

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

ADR recovery process

  • 분석 단계

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

  • 다시 실행 단계

    분석 단계는 두 단계(P)로 나뉘어집니다.

    • 단계 1

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

    • 단계 2

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

  • 실행 취소 단계

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

ADR 복구 구성 요소

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

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

    PVS는 기존 tempdb 버전 저장소 대신 데이터베이스 자체에서 생성된 행 버전을 유지하기 위한 데이터베이스 엔진 메커니즘입니다. PVS는 리소스 격리를 가능하게 하고 읽을 수 있는 보조 복제본의 가용성을 향상시킵니다.

  • 논리적 되돌리기

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

    • 중단된 모든 트랜잭션을 추적하고 다른 트랜잭션에 표시되지 않도록 표시합니다.
    • 모든 사용자 트랜잭션에 PVS를 사용하여 롤백을 수행합니다. 트랜잭션 로그를 실제로 검사하고 변경 내용을 한 번에 하나씩 취소하지 않습니다.
    • 트랜잭션이 중단된 직후 모든 잠금을 해제합니다. 중단은 단순히 메모리의 변경 내용을 표시하는 것을 포함하므로 프로세스는 매우 효율적이므로 잠금을 오랫동안 보관할 필요가 없습니다.
  • SLOG

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

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

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

ADR(가속 데이터베이스 복구) 패턴

다음은 ADR의 이점을 가장 많이 누릴 수 있는 유형의 워크로드입니다.

  • ADR은 장기 실행 트랜잭션이 있는 워크로드에 권장됩니다.
  • ADR은 활성 트랜잭션으로 인해 트랜잭션 로그가 크게 증가하는 경우를 본 워크로드에 권장됩니다.
  • ADR은 장기 실행 복구(예: 예기치 않은 서비스 다시 시작 또는 수동 트랜잭션 롤백)로 인해 장기간 데이터베이스를 사용할 수 없는 워크로드에 권장됩니다.

가속 데이터베이스 복구를 위한 모범 사례

  • 데이터베이스에서 장기 실행 트랜잭션을 방지합니다. 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)를 참조하세요.

    • 워크로드 간에 또는 유지 관리 기간 동안 PVS 정리 프로세스를 수동으로 활성화하려면 sys.sp_persistent_version_cleanup을 사용합니다. 자세한 내용은 sys.sp_persistent_version_cleanup을 참조하세요.

  • 스토리지 사용량, 높은 중단 트랜잭션 및 기타 요인에 문제가 있는 경우 SQL Server의 ADR(가속 데이터베이스 복구) 문제 해결을 참조하세요.

다음 단계