대량 BCP 작업 시 발생하는 오류 (665, 1450, 33)
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server에서 특정 테이블의 데이터를 내려받고 싶을 때(특히 대량의 데이터) 일반적으로 많이 사용하는 방법이 BCP를 이용한 방법이다.
- BCP 사용 : http://sqlmvp.kr/140176987081
BCP를 이용하여 데이터를 내려 받을 때 한계용량은 얼마일까? 테이블 크기만큼 똑같이 내려 받을 수 있을까?
다음 사례는 CSS SQL Server Engineer 팀 블로그에 게재된 내용으로 대량의 데이터를 BCP로 내려 받을 때 발생하는 오류 및 원인을 설명 한다. 필자가 이해한 내용을 바탕으로 요약 하였으며 번역의 오류나 기술적 오류가 있음을 인지 한다.
최근 고객 데이터베이스로부터 BCP를 사용하여 데이터를 내려받는 중 665 문제가 발생하였다. BCP를 사용하였을 때 첫 번째 인스턴스는 문제가 없었으나 두 번째 인스턴스에서 오류가 발생 하였다.
분석 결과 오류번호 665는 writeFile을 호출하는 동안 파일 시스템 제한 문제였다.
NTFS File Growth : http://blogs.technet.com/b/askcore/archive/2009/10/16/the-four-stages-of-ntfs-file-growth.aspx
요약하면 하나의 NTFS파일이 최대 할당 상태에 있을 때 포인트 속성 목록 항목에 대한 MTF 할당(1K)한다. 자식레코드(1K 할당) 고정 정보는 시작 물리적 클러스터와 인접 클러스터의 세그먼트 파일에 할당되는데 실행한 BCP 작업은 이들 작업보다 더 많은 조각난 파일을 할당한다.
조가화의 예는 다음과 같다.
- Mapping Pair (Physical Cluster, ## of Clusters From Physical)
- The file segment starts at physical cluster 100 and used 8 clusters.
- The entry is 100, 8
클러스터 크기와 MTF 크기는 NTFS 파일을 수용 할 수 있는 최대 크기를 결정한다. NTFS에 대한 자세한 내용은 다음 링크를 참고 한다.
- NTFS 클러스터 크기 : http://support.microsoft.com/kb/140365
이번 BCP 시나리오에서는 많은 인스턴스들의 BCP 작업은 빠른 속도로 파일 시스템 제한을 발생 하였다. 동일한 디스크 LUN에서 일어나는 많은 할당은 조각화 수준의 가능성을 제기하고 내부적으로 매핑 쌍 공간에 압력을 발생한다.
BCP 쓰기는 4K 버퍼를 사용한다. BCP는 버퍼를 채우고 반복해서 쓴다. 시스템이 4K 클러스터를 정렬을 사용하면 동일한 물리적 매체에 있는 여러 개의 복사본 사이에서 클러스터 4K 접촉을 허용한다.
빅데이터 작업을 처리하기 위한 몇 가지 방법을 소개한다.
QEF 사용 |
|
NTFS 압축 방지 |
|
64K 클러스터 사용 |
|
조각모음 |
|
BCP |
|
백업 |
|
MDF/NDF/LDF |
|
[이벤트 오류]
- 33 – 다른 프로세스가 참조하는 파일의 일부를 잠궈 프로세스가 파일을 액세스 할 수 없다. NTFS 압축이 활성화 될 때 일반적으로 발생한다.
- 665 – 요청한 작업으로 인해 파일 시스템 제한을 완료 할 수 없다.
- 1450 – 시스템 리소스가 부족하기 때문에 요청한 서비스를 완료 할 수 없다.
[참고자료]
CSS SQL Server Engineer : http://blogs.msdn.com/b/psssql/archive/2012/07/25/how-it-works-sql-server-bcp-database-i-o-backup-restore-reports-operating-system-error-665-1450-or-33-when-writing-to-the-file-big-data.aspx
2013-08-14 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SSRS SocketException (0) | 2015.07.22 |
---|---|
파티션 분할 시 I/O 최소화 하기 (0) | 2015.07.22 |
기본 추적(default tace) 활성화 및 로그 확인 (0) | 2015.07.22 |
SQL Server ALTER TABLE syntax diagrams (0) | 2015.07.22 |
SQL Server Performance Counter Guidance (0) | 2015.07.22 |