대량 복사 일괄 처리 크기 관리

적용 대상: 예SQL Server(지원되는 모든 버전) 예Azure SQL Database 예Azure SQL Managed Instance 예Azure Synapse Analytics 예병렬 데이터 웨어하우스

대량 복사 작업에서 일괄 처리의 주요 목적은 트랜잭션의 범위를 정의하는 것입니다. 일괄 처리 크기를 설정하지 않으면 대량 복사 함수에서 전체 대량 복사를 하나의 트랜잭션으로 간주합니다. 일괄 처리 크기를 설정하면 각 일괄 처리에서 일괄 처리가 완료될 때 커밋되는 하나의 트랜잭션이 구성됩니다.

일괄 처리 크기를 지정하지 않고 대량 복사를 수행하는 동안 오류가 발생하면 전체 대량 복사가 롤백됩니다. 장기 실행 대량 복사는 복구하는 데 오랜 시간이 걸릴 수 있습니다. 일괄 처리 크기를 설정하면 대량 복사에서 각 일괄 처리를 하나의 트랜잭션으로 간주하고 각 일괄 처리를 커밋합니다. 오류가 발생할 경우 처리 중인 마지막 일괄 작업만 롤백되면 됩니다.

일괄 처리 크기는 잠금 오버헤드에도 영향을 줄 수 있습니다. 에 대해 대량 복사를 수행할 때 SQL Server bcp_control 사용하여 행 잠금 대신 테이블 잠금을 획득하도록 TABLOCK 힌트를 지정할 수 있습니다. 오버헤드를 최소화하여 전체 대량 복사 작업에 대해 단일 테이블 잠금을 보유할 수 있습니다. TABLOCK을 지정하지 않으면 개별 행에 잠금이 설정되고, 대량 복사 기간 동안 모든 잠금을 유지 관리하는 오버헤드로 인해 성능이 느려질 수 있습니다. 트랜잭션 기간 동안에만 잠금이 보유되므로 일괄 처리 크기를 지정하면 현재 보유된 잠금을 해제하는 커밋이 정기적으로 생성되어 이 문제가 해결됩니다.

많은 행을 대량 복사하는 경우 일괄 처리를 구성하는 행 수가 성능에 큰 영향을 줄 수 있습니다. 권장되는 일괄 처리 크기는 수행하는 대량 복사 유형에 따라 달라집니다.

  • SQL Server로 대량 복사하는 경우 TABLOCK 대량 복사 힌트를 지정하고 큰 일괄 처리 크기를 설정합니다.

  • TABLOCK이 지정되지 않은 경우 일괄 처리 크기를 1,000행 미만으로 제한합니다.

데이터 파일에서 대량 복사하는 경우 bcp_exec 를 호출하기 전에 BCPBATCH 옵션으로 bcp_control호출하여 일괄 처리 크기를 지정합니다. bcp_bindbcp_sendrow사용하여 프로그램 변수에서 대량 복사하는 경우 bcp_sendrow x번 호출한 후 bcp_batch 호출하여 일괄 처리 크기를 제어합니다. 여기서 x는 일괄 처리의 행 수입니다.

트랜잭션 크기를 지정하는 것 외에도 일괄 처리는 행이 네트워크를 통해 서버로 전송되는 시기에 영향을 줍니다. 대량 복사 함수는 일반적으로 네트워크 패킷이 채워질 때까지 bcp_sendrow 행을 캐시한 다음 전체 패킷을 서버로 보냅니다. 그러나 애플리케이션이 bcp_batch 를 호출하면 현재 패킷이 채워졌는지 여부에 관계없이 서버로 전송됩니다. 매우 작은 일괄 처리 크기를 사용하면 부분적으로 채워진 많은 패킷이 서버로 전송되므로 성능이 느려질 수 있습니다. 예를 들어 모든 bcp_sendrowbcp_batch 호출하면 각 행이 별도의 패킷으로 전송되고 행이 매우 크지 않으면 각 패킷의 공간이 낭비됩니다. SQL Server 대한 네트워크 패킷의 기본 크기는 4KB이지만 애플리케이션은 SQL_ATTR_PACKET_SIZE 특성을 지정하는 SQLSetConnectAttr을 호출하여 크기를 변경할 수 있습니다.

일괄 처리의 또 다른 부작용은 각 일괄 처리가 bcp_batch 완료될 때까지 처리되지 않은 결과 집합으로 간주된다는 것입니다. 일괄 처리가 처리되지 않는 동안 연결 핸들에서 다른 작업을 시도하면 SQL Server Native Client ODBC 드라이버에서 SQLState = "HY000"과 오류 메시지 문자열을 사용하여 오류를 발생합니다.

"[Microsoft][SQL Server Native Client] Connection is busy with  
results for another hstmt."  

참고 항목

ODBC)(대량 복사 작업 수행
데이터 대량 가져오기 및 내보내기(SQL Server)