BOL 링크
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ko/udb9/html/50d19cab-1830-4f70-8df1-2450ce887805.htm

http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005TSQL&intPage=1&intCategory=0&strSearchCategory=%7Cs_name%7Cs_subject%7C&strSearchWord=&intSeq=351


대량 데이타 전송 관련 방법은 bcp, Bulk insert, INSERT ...SELECT * FROM OPENROWSET(BULK...)  세가지가 있다.

Bulk Insert는 쿼리 분석기에서 수행되며, 실행 계획이나 작업 수행 방식이 스레드 형식으로 처리 된다.
Bcp는 명령 프롬프트에서 수행되며, Odbc 인터페이스를 가지고 프로세스로 수행된다.

성능은 Bulk insert가 제일 빠르다.


Differences Between BULK INSERT and bcp

1. Bulk Insert 는 SQL 문이고, BCP는 Cmd 유틸이다.

1-1. Bulk Insert 는 In-Process 이고, BCP는 Out-Of-Process 이다 (자세한 사항은 BOL 참조)

1-2. 1-1과 같은 이유로 서로 다른 pc를 이용 한다면 bcp로 cpu 부하를 덜 수 있다!


2. Bulk Insert 는 입력만 가능하고, BCP는 출력도 가능하다

3. Bulk Insert 가 입력시 BCP보다 성능이 좋다




 

입력시 Bulk Insert와 BCP 모두 사용할 수 있는 상황에서는 Bulk Insert를 사용하고


그렇지 않으면 BCP 사용하라!

출력시 BCP 사용하라!



In-Process와 Out-of-Process 작업

Transact-SQL 명령은 SQL Server 에서 in-process를 실행하며 동일한 메모리 주소 공간을 공유합니다. 데이터 파일은 SQL Server 프로세스에서 열리므로 데이터는 클라이언트 프로세스와 SQL Server 프로세스 간에 복사되지 않습니다. BULK INSERT 또는 INSERT ... SELECT * FROM OPENROWSET(BULK...)를 사용하여 데이터를 가져오려면 데이터를 대량으로 가져오기 위해 Transact-SQL을 사용할 때의 보안 고려 사항을 참조하십시오.

이와는 반대로 bcp 명령과 SSIS 실행 파일은 out-of-process를 실행합니다. 프로세스 메모리 공간에서 데이터를 이동하려면 bcp 및 SSIS가 프로세스 간 데이터 마샬링을 사용해야 합니다. 프로세스 간 데이터 마샬링은 메서드 호출 매개 변수를 프로세서에 대량의 부하를 추가할 수 있는 바이트 스트림으로 변환하는 프로세스입니다. 그러나 bcp 및 SSIS는 클라이언트 프로세스에서 데이터를 구문 분석하여 기본 저장소 형식으로 변환하기 때문에 SQL Server 프로세스에서 구문 분석 및 데이터 변환을 오프로드할 수 있습니다. CPU 제약 조건이 있는 경우 Transact-SQL 명령을 사용하지 않고 둘 이상의 CPU가 있는 컴퓨터나 다른 컴퓨터에서 bcp 또는 SSIS를 사용하여 더 향상된 성능으로 대량 가져오기의 성능을 향상시킬 수 있습니다.