대량 가져오기 성능 최적화

이 항목에서는 bcp 명령, BULK INSERT 문 또는 OPENROWSET(BULK...) 함수(Transact-SQL)를 사용하여 Microsoft SQL Server의 테이블로 데이터를 대량으로 가져오는 작업을 최적화하기 위한 옵션에 대해 설명합니다. 대량의 데이터를 최대한 빠른 속도로 가져오거나 내보내려면 성능에 영향을 주는 요인과 성능을 관리하는 데 사용할 수 있는 명령 한정자를 이해하는 것이 중요합니다. bcp보다는 Transact-SQL이 빠르므로 가능하다면 Transact-SQL 문을 사용하여 SQL Server로 대량의 데이터를 가져오는 것이 좋습니다.

[!참고]

각 방법의 차이점은 대량 가져오기 및 내보내기 작업 정보를 참조하십시오.

대량 가져오기 작업의 성능을 최적으로 향상시키는 방법은 다음과 같은 요인에 따라 달라집니다.

  • 테이블에 제약 조건이나 트리거 또는 둘 다 있는지 여부

  • 데이터베이스가 사용하는 복구 모델

    자세한 내용은 복구 모델 개요를 참조하십시오.

  • 데이터가 복사되는 테이블이 비어 있는지 여부

  • 테이블에 인덱스가 있는지 여부

  • TABLOCK이 지정되는지 여부

  • 데이터가 단일 클라이언트에서 복사될지 여러 클라이언트에서 병렬로 복사될지 여부

  • SQL Server가 실행 중인 두 컴퓨터 사이에 데이터가 복사되는지 여부

중요 정보중요

SQL Server 2005 이상 버전에서는 트리거가 설정되어 있을 때 대량 가져오기 최적화를 사용할 수 있습니다. 트리거에 대해 행 버전 관리를 사용하고 tempdb의 버전 저장소에 행 버전을 저장합니다. 트리거를 사용하여 큰 데이터 레코드 일괄 처리를 대량 가져오려면 먼저 트리거로 인한 버전 저장소의 영향을 수용하도록 tempdb의 크기를 확장해야 할 수 있습니다.

이런 요인이 대량 가져오기 시나리오에 어떤 영향을 주는지에 대한 자세한 내용은 대량 가져오기 최적화 지침을 참조하십시오.

대량 가져오기 최적화 방법

데이터 대량 가져오기 작업의 속도를 높이기 위해 SQL Server는 다음과 같은 방법을 제공합니다.

  • 최소 로깅 사용

    단순 복구 모델에서는 대부분의 대량 작업을 최소 로깅합니다.

    전체 복구 모델을 사용하는 데이터베이스의 경우 대량 가져오기 작업 중에 수행되는 모든 행 삽입 작업이 트랜잭션 로그에 기록됩니다. 많은 양의 데이터를 가져올 때는 트랜잭션 로그가 빠르게 채워질 수 있습니다. 대량 가져오기 작업에서는 최소 로깅이 전체 로깅보다 효율적이며 대량 가져오기 작업으로 인해 로그 공간이 꽉 차는 경우를 줄일 수 있습니다. 일반적으로 전체 복구 모델을 사용하는 데이터베이스에서 대량 가져오기 작업을 최소 로깅하려면 먼저 데이터베이스를 대량 로그 복구 모델로 전환합니다. 데이터를 대량 가져온 후 복구 모델을 다시 전체 복구 모델로 전환합니다. 자세한 내용은 전체 또는 대량 로그 복구 모델에서 전환을 참조하십시오.

    [!참고]

    삽입된 행은 최적화된 대량 로깅이 적용되는 경우 최소 로깅되고 그렇지 않으면 트랜잭션 로그에 전체 로깅됩니다. 대량 가져오기 작업이 기록되는 시기 및 대량 가져오기 작업에 최소 로깅을 적용하는 방법은 최소 로깅 가능한 작업대량 가져오기의 최소 로깅을 위한 선행 조건을 참조하십시오.

  • 여러 클라이언트에서 단일 테이블에 병렬로 데이터 가져오기

    SQL Server에서는 여러 클라이언트에서 단일 테이블로 대량의 데이터를 병렬로 가져올 수 있습니다. 3가지 대량 가져오기 메커니즘은 모두 데이터 병렬 가져오기를 지원합니다. 이 방법을 사용하면 데이터 가져오기 작업의 성능이 향상됩니다.

    자세한 내용은 테이블 수준 잠금으로 데이터를 병렬로 가져오기를 참조하십시오.

  • 일괄 처리 사용

    데이터를 가져올 때 일괄 처리를 사용하는 방법과 일괄 처리를 관리하는 명령 한정자에 대한 자세한 내용은 대량 가져오기를 위한 일괄 처리 관리를 참조하십시오.

    [!참고]

    OPENROWSET 절의 BULK 옵션은 일괄 처리 크기 제어를 지원하지 않습니다.

  • 트리거 해제

    트리거를 해제하면 성능이 향상될 수 있습니다.

    대량 가져오기 작업에 대한 트리거 실행의 영향과 트리거 설정 또는 해제하는 방법에 대한 자세한 내용은 데이터 대량 가져오기 작업 시의 트리거 실행 제어를 참조하십시오.

  • 제약 조건 비활성화

    대량 가져오기 작업에서 제약 조건 확인의 효과와 테이블의 CHECK 제약 조건 및 FOREIGN KEY 제약 조건을 활성화 또는 비활성화하는 방법에 대한 자세한 내용은 대량 가져오기 작업으로 제약 조건 검사 제어를 참조하십시오.

  • 데이터 파일의 데이터 정렬

    기본적으로 대량 가져오기 작업에서는 데이터 파일이 정렬되지 않은 것으로 간주됩니다. 테이블에 클러스터형 인덱스가 있는 경우 bcp 유틸리티, BULK INSERT 문 및 OPENROWSET(BULK…) 함수(Transact-SQL)를 사용하면 대량 가져오기 작업 동안 데이터 파일의 데이터가 정렬되는 방법을 지정할 수 있습니다. 데이터 파일의 데이터를 테이블과 같은 순서로 정렬하는 작업은 선택적이지만 데이터 파일의 정렬 방식을 테이블과 동일하게 지정하면 대량 가져오기 작업의 성능을 향상시킬 수 있습니다.

    자세한 내용은 데이터 대량 가져오기 중 정렬 순서 제어를 참조하십시오.

  • 잠금동작 제어

    대량 가져오기 작업 중 잠금 동작을 지정하는 방법은 대량 가져오기를 위한 잠금 동작 제어를 참조하십시오.

  • 네이티브 형식으로 데이터 가져오기

    자세한 내용은 네이티브 형식을 사용하여 데이터 가져오기 및 내보내기데이터를 가져오거나 내보내기 위해 유니코드 네이티브 형식 사용을 참조하십시오.