다음을 통해 공유


대량 가져오기의 최소 로깅을 위한 필수 조건

적용 대상: SQL Server

전체 복구 모델에서 데이터베이스의 경우 대량 가져오기를 통해 수행되는 모든 행 삽입 작업은 트랜잭션 로그에 완전히 로깅됩니다. 큰 데이터 가져오기로 인해 전체 복구 모델을 사용하는 경우 트랜잭션 로그가 빠르게 채워질 수 있습니다. 반면, 단순 복구 모델 또는 대량 로그된 복구 모델에서 대량 가져오기 작업의 최소 로깅은 대량 가져오기 작업이 로그 공간을 채울 가능성을 줄입니다. 또한 최소 로깅은 전체 로깅보다 효율적입니다.

참고 항목

대량 로그된 복구 모델은 대량 작업 중에 전체 복구 모델을 일시적으로 대체하도록 설계되었습니다.

대량 가져오기 작업을 최소로 로깅하기 위한 테이블 요구 사항

최소 로깅에서 대상 테이블은 다음 조건을 충족해야 합니다.

  • 테이블이 복제되지 않습니다.

  • 테이블 잠금이 지정되어야 합니다(TABLOCK 사용).

    참고 항목

    대량 가져오기 작업을 최소 로깅으로 수행하는 동안 데이터 삽입은 트랜잭션 로그에 기록되지 않지만 새 익스텐트를 테이블에 할당할 때마다 데이터베이스 엔진에서 익스텐트 할당을 기록합니다.

  • 테이블은 메모리 최적화 테이블이 아닙니다.

테이블에 대한 최소 로깅의 발생 여부는 다음과 같이 테이블의 인덱싱 여부에 따라 달라지고, 테이블이 인덱싱되는 경우 테이블이 비어 있는지 여부에 따라 달라집니다.

  • 테이블에 인덱스가 없는 경우 데이터 페이지가 최소 로깅됩니다.

  • 테이블에 클러스터형 인덱스는 없지만 하나 이상의 비클러스터형 인덱스가 있는 경우 데이터 페이지는 항상 최소 로깅됩니다. 그러나 인덱스 페이지가 기록되는 방법은 테이블이 비어 있는지 여부에 따라 달라집니다.

    • 테이블이 비어 있는 경우 인덱스 페이지가 최소 로깅됩니다. 빈 테이블로 시작하여 데이터 대량 가져오기를 여러 일괄 처리로 수행하는 경우 첫 번째 일괄 처리에서는 인덱스 및 데이터 페이지가 최소 로깅되지만 두 번째 일괄 처리부터는 데이터 페이지만 최소로 로깅됩니다.

    • 테이블이 비어 있지 않은 경우 인덱스 페이지가 완전히 로깅됩니다.

    • 인덱스 중 하나에 IGNORE_DUP_KEY = ON이 있으면 인덱스 및 데이터 페이지가 완전히 로깅됩니다.

  • 테이블에 클러스터형 인덱스가 있고 비어 있는 경우 데이터 및 인덱스 페이지가 모두 최소 로깅됩니다. 이와 달리 테이블이 B-트리 기반 클러스터형 인덱스를 포함하며 비어 있지 않으면 복구 모델과 관계없이 데이터 페이지와 인덱스 페이지가 모두 완전히 로깅됩니다. 빈 rowstore 테이블로 시작하여 데이터 대량 가져오기를 일괄 처리로 수행하는 경우 첫 번째 일괄 처리에서는 인덱스 및 데이터 페이지가 최소 로깅되지만 두 번째 일괄 처리부터는 데이터 페이지만 대량으로 로깅됩니다.

    참고 항목

    설명서는 인덱스를 지칭할 때 B-트리라는 용어를 사용합니다. rowstore 인덱스에서 데이터베이스 엔진은 B+ 트리를 구현합니다. 이는 columnstore 인덱스나 메모리 최적화 테이블 인덱스에는 적용되지 않습니다. 자세한 내용은 SQL Server 및 Azure SQL 인덱스 아키텍처와 디자인 가이드를 참조하세요.

  • 클러스터형 columnstore 인덱스의 로깅에 대한 자세한 내용은 Columnstore 인덱스 데이터 로드 지침을 참조하세요.

참고 항목

트랜잭션 복제를 사용하는 경우 대량 로그된 복구 모델에서도 BULK INSERT 작업이 완전히 로깅됩니다.

참고 항목

다음 단계