데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

MaxBCPThreads에 따른 BCP 병렬출력

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

BCP 유틸리티(BCP.exe)는 BCP(Bulk Copy Data) API를 사용하는 명령줄 도구이다. BCP는다음과 같은 기능을 수행 할 수 있다.

  • 데이터 파일로 SQL Server 테이블의 데이터를 대량으로 내보낸다.
  • 쿼리의 데이터를 대량으로 내보낸다.
  • SQL server 테이블로 데이터 파일의 데이터를 대량으로 가져온다.
  • 서식 파일을 생성한다.

 

 

BCP를 병렬로 처리하기 위해서 MaxBCPThreads를 지정하여 사용하게 된다. MaxBCPThreads를 0이 아닌 값으로 설정 하여 실행 하였을 때 병렬로 생성되지만 일부 환경에 따라 스냅숏 에이전트는 멀티 스냅숏파일을 생성하지 않았다.

 

조사결과 스냅숏에이전트에 의해 병렬 파일 내보내기에 영향을 미치는 테이블의 통계 분포를 발견 했다. 이는 동시 스냅샷 생성 옵션이 배포 에이전트에 의해 병렬 BCP 스레드의 사용을 방지하도록 되어 있었다.

 

재현을 위해서 세 개의 테이블을 만들었다. tblNewArticle6는 60398행을, tblNewArticle3은 100000행을, tblNewArticle1은 2개의 행을 가지고 있다. 스냅숏 에이전트의 MaxBCPThreads 값은 6으로 설정하였다. tblNewArticle6은 12BCP 파일을, tblNewArticle3은 오직 하나의 BCP 파일이 있다.

 

프로파일러를 이용해서 스냅숏 에이전트데 대한 정보를 찾을 수 있었다. BCP스레드는 로드 순서 및 힌트 파티션을 #으로 표시 하였다.

 

 

또한 테이블에 대해 DBCC SHOW_STATISTICS 실행을 하는 동적 SQL을 확인할 수 있었다.

 

다음 그림은 tblNewArticle6 데이터에 대한 통계 분포이다.

 

 

병렬 BCP 파일 생성은 다음에 해당 하는 경우가능하다.

  • 클러스터된 인덱스의 통계에 사용할 수 있는 여러 개의 범위가 있다.
  • 클러스터된 인덱스는 기본키 열을 정의해야 한다.
  • MaxThreads 값이 1이 아닌 다른 값으로 설정한다.

 

10만행을 가지고 있는 tblNewArticle3에 클러스터된 인덱스와 기본키 열을 정의하여 다음과 같이 병렬 BCP를 처리하도록 하였다. 12개의 병렬BCP가 생성된 것을 확인 할 수 있다.

 

 

[참고자료]

http://troubleshootingsql.com/2013/09/23/maxbcpthreads-not-causing-parallel-export/

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1893 SQL Server 트랜잭션 로그 읽기 jevida(강성욱) 2016.10.12 2129
» MaxBCPThreads에 따른 BCP 병렬출력 jevida(강성욱) 2016.10.11 1091
1891 확장이벤트와 dm_os_wait_stats 대기유형 매핑 jevida(강성욱) 2016.10.11 1896
1890 장기 트랜잭션 확인 및 경고 설정 jevida(강성욱) 2016.10.11 1433
1889 SQL 데이터 수집툴 DiagManager 사용법 jevida(강성욱) 2016.10.11 1328
1888 Windows Server 2012 R2 그룹 관리 서비스 계정 및 SQL 서버 jevida(강성욱) 2016.10.11 1835
1887 Kerbros 구성 관리자 툴 jevida(강성욱) 2016.10.11 1166
1886 SQL Server Geography 및 Geometory 데이터 형식 jevida(강성욱) 2016.10.11 2453
1885 SQL Server를 이용한 신용카드 보안 -조직이 PCI DSS 준수를 달성 하기 위한 요건 jevida(강성욱) 2016.10.11 1365
1884 TDE 암호화 사용하기 jevida(강성욱) 2016.10.11 3418
1883 SQL Server 암호화 하기 jevida(강성욱) 2016.10.11 2762
1882 의도하지 않은 분산트랜잭션 사용 jevida(강성욱) 2016.10.11 885
1881 Affinity I/O Mask jevida(강성욱) 2016.10.11 1170
1880 LPE_BATCH 스핀락 jevida(강성욱) 2016.10.11 884
1879 SQL Server 17953 오류 jevida(강성욱) 2016.10.11 1005
1878 SQL 연결 18056 오류 jevida(강성욱) 2016.10.11 1365
1877 SQL 2008 R2 Sp1 적용과 9013 오류 - 포맷 섹터 크기에 따른 오류 jevida(강성욱) 2016.10.11 1866
1876 JDBC 로깅 파일 위치 설정 jevida(강성욱) 2016.10.11 960
1875 NUMA Node 메모리 블록 jevida(강성욱) 2016.10.11 1047
1874 AppDomain unloading 오류 로그 – CLR 오류 jevida(강성욱) 2016.10.11 1191





XE Login