대량 가져오기의 최소 로깅을 위한 선행 조건Prerequisites for Minimal Logging in Bulk Import

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

전체 복구 모델을 사용하는 데이터베이스의 경우 대량 가져오기로 수행되는 모든 행 삽입 작업이 트랜잭션 로그에 기록됩니다.For a database under the full recovery model, all row-insert operations that are performed by bulk import are fully logged in the transaction log. 전체 복구 모델을 사용할 경우 많은 양의 데이터를 가져오면 트랜잭션 로그가 빨리 채워질 수 있습니다.Large data imports can cause the transaction log to fill rapidly if the full recovery model is used. 이와 달리 단순 복구 모델 또는 대량 로그 복구 모델에서 대량 가져오기 작업의 로깅을 최소화하면 대량 가져오기 작업에 의해 로그 공간이 채워질 가능성이 줄어듭니다.In contrast, under the simple recovery model or bulk-logged recovery model, minimal logging of bulk-import operations reduces the possibility that a bulk-import operation will fill the log space. 또한 최소 로깅은 전체 로깅보다 효율적입니다.Minimal logging is also more efficient than full logging.

참고

대량 로그 복구 모델은 대규모의 대량 작업 중에 전체 복구 모델을 임시로 대체하기 위해 고안된 것입니다.The bulk-logged recovery model is designed to temporarily replace the full recovery model during large bulk operations.

대량 가져오기 작업의 최소 로깅을 위한 테이블 요구 사항Table Requirements for Minimally Logging Bulk-Import Operations

최소 로깅에서 대상 테이블은 다음 조건을 충족해야 합니다.Minimal logging requires that the target table meets the following conditions:

  • 테이블이 복제되고 있지 않아야 합니다.The table is not being replicated.

  • 테이블 잠금이 지정되어야 합니다(TABLOCK 사용).Table locking is specified (using TABLOCK). 클러스터형 columnstore 인덱스가 포함된 테이블의 경우에는 최소 로깅에 TABLOCK을 사용할 필요가 없습니다.For table with clustered columnstore index, you don't need TABLOCK for minimal logging. 또한 압축된 행 그룹으로의 데이터 로드는 최소 로깅되므로 일괄 처리 크기가 102400 이상이어야 합니다.Additionally, only the data load into compressed rowgroups are minimally logged requiring a batchsize of 102400 or higher.

    참고

    대량 가져오기 작업을 최소 로깅으로 수행하는 동안 데이터 삽입은 트랜잭션 로그에 기록되지 않지만 새 익스텐트를 테이블에 할당할 때마다 데이터베이스 엔진Database Engine 에서 익스텐트 할당을 기록합니다.Although data insertions are not logged in the transaction log during a minimally logged bulk-import operation, the 데이터베이스 엔진Database Engine still logs extent allocations each time a new extent is allocated to the table.

  • 메모리 액세스에 최적화된 테이블이 아닙니다.Table is not a memory-optimized table.

    테이블에 대한 최소 로깅의 발생 여부는 다음과 같이 테이블의 인덱싱 여부에 따라 달라지고, 테이블이 인덱싱되는 경우 테이블이 비어 있는지 여부에 따라 달라집니다.Whether minimal logging can occur for a table also depends on whether the table is indexed and, if so, whether the table is empty:

  • 테이블에 인덱스가 없는 경우 데이터 페이지가 최소 로깅됩니다.If the table has no indexes, data pages are minimally logged.

  • 테이블에 클러스터형 인덱스는 없지만 하나 이상의 비클러스터형 인덱스가 있는 경우 데이터 페이지는 항상 최소 로깅됩니다.If the table has no clustered index but has one or more nonclustered indexes, data pages are always minimally logged. 그러나 인덱스 페이지 로깅 방법은 다음과 같이 테이블이 비어 있는지 여부에 따라 달라집니다.How index pages are logged, however, depends on whether the table is empty:

    • 테이블이 비어 있는 경우 인덱스 페이지가 최소 로깅됩니다.If the table is empty, index pages are minimally logged.

    • 테이블이 비어 있지 않은 경우 인덱스 페이지가 모두 로깅됩니다.If table is non-empty, index pages are fully logged.

      참고

      빈 테이블로 시작하여 데이터 대량 가져오기를 다중 일괄 처리로 수행하는 경우 첫 번째 일괄 처리에서는 인덱스 및 데이터 페이지가 최소 로깅되지만 두 번째 일괄 처리부터는 데이터 페이지만 최소 로깅됩니다.If you start with an empty table and bulk import the data in multiple batches, both index and data pages are minimally logged for the first batch, but beginning with the second batch, only data pages are minimally logged.

  • 테이블에 클러스터형 인덱스가 있고 비어 있는 경우 데이터 및 인덱스 페이지가 모두 최소 로깅됩니다.If the table has a clustered index and is empty, both data and index pages are minimally logged. 이와 달리 테이블이 btree 기반 클러스터형 인덱스를 포함하며 비어 있지 않으면 복구 모델에 관계없이 데이터 페이지와 인덱스 페이지가 모두 완전히 로깅됩니다.In contrast, if a table has a btree based clustered index and is non-empty, data pages and index pages are both fully logged regardless of the recovery model. 클러스터형 columnstore 인덱스가 포함된 테이블의 경우 테이블이 비어 있거나 일괄 처리 크기가 102400 이상인지 여부에 관계없이 압축된 행 그룹에 대한 데이터 로드는 항상 최소 로깅됩니다.For tables with clustered columnstore index, the dataload into compressed rowgroup is always minimally logged independent of the table being empty or not when batchsize >= 102400.

    참고

    빈 테이블 행 저장소 테이블로 시작하여 데이터 대량 가져오기를 일괄 처리로 수행하는 경우 첫 번째 일괄 처리에서는 인덱스 및 데이터 페이지가 최소 로깅되지만 두 번째 일괄 처리부터는 데이터 페이지만 대량으로 로깅됩니다.If you start with an empty table rowstore table and bulk import the data in batches, both index and data pages are minimally logged for the first batch, but from the second batch onwards, only data pages are bulk logged.

참고

트랜잭션 복제를 사용하는 경우 대량 로그 복구 모델에서도 BULK INSERT 작업이 모두 기록됩니다.When transactional replication is enabled, BULK INSERT operations are fully logged even under the Bulk Logged recovery model.

참고 항목See Also

복구 모델(SQL Server) Recovery Models (SQL Server)
bcp 유틸리티 bcp Utility
BULK INSERT(Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET(Transact-SQL) OPENROWSET (Transact-SQL)
BACKUP(Transact-SQL) BACKUP (Transact-SQL)
ALTER DATABASE(Transact-SQL) ALTER DATABASE (Transact-SQL)
테이블 힌트(Transact-SQL) Table Hints (Transact-SQL)
INSERT(Transact-SQL) INSERT (Transact-SQL)