대량 BCP 작업 시 발생하는 오류 (665, 1450, 33)

 

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

 

SQL Server에서 특정 테이블의 데이터를 내려받고 싶을 때(특히 대량의 데이터) 일반적으로 많이 사용하는 방법이 BCP를 이용한 방법이다.

 

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에 대한 자세한 내용은 다음 링크를 참고 한다.

 

 

 

이번 BCP 시나리오에서는 많은 인스턴스들의 BCP 작업은 빠른 속도로 파일 시스템 제한을 발생 하였다. 동일한 디스크 LUN에서 일어나는 많은 할당은 조각화 수준의 가능성을 제기하고 내부적으로 매핑 쌍 공간에 압력을 발생한다.

 

BCP 쓰기는 4K 버퍼를 사용한다. BCP는 버퍼를 채우고 반복해서 쓴다. 시스템이 4K 클러스터를 정렬을 사용하면 동일한 물리적 매체에 있는 여러 개의 복사본 사이에서 클러스터 4K 접촉을 허용한다.

 

빅데이터 작업을 처리하기 위한 몇 가지 방법을 소개한다.

QEF 사용

  • 4K의 MTF를 할당 할 수 있는 QFE를 제공한다. MTF의 크기를 늘리면 모든 파일은 물리적 스토리지의 4K를 필요로 한다.

NTFS 압축 방지

  • 대상 파일에 대한 NTFS 압축을 사용하지 말라. NTFS 압축은 더 많은 매핑 쌍을 사용한다.

64K 클러스터 사용

  • 각 클러스터에 대해 더 큰 할당을 추적 할 수 있다.

조각모음

  • 물리적 조각모음은 도움이 된다.

BCP

  • 가능한 별도의 물리적 경로를 사용하여 조각화를 일으키는 원인을 피한다.
  • 한계치를 방지하기 위해 합리적인 파일 크기와 데이터 청크를 구성한다

백업

  • 백업 시 압축을 사용한다.
  • 물리적 I/O를 분리한다.

MDF/NDF/LDF

  • 자동증가 작업을 피한다.
  • 물리적 조각화에 대해 낮은 드라이브 사용한다.
  • NTFS 압축 볼륨의 읽기 전용 데이터베이스에 주의한다.

 

[이벤트 오류]

  • 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

 

 

 


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

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 37971
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20648
1834 기본 추적(default tace) 활성화 및 로그 확인 jevida(강성욱) 2016.10.07 1472
1833 SQL Server ALTER TABLE syntax diagrams jevida(강성욱) 2016.10.07 1211
1832 SQL Server Performance Counter Guidance jevida(강성욱) 2016.09.30 2628
1831 SQL Server CREATE TABLE syntax diagrams jevida(강성욱) 2016.09.30 1471
1830 SQL Server 2012 Sp1 설치 이슈 및 해결 jevida(강성욱) 2016.09.30 1653
1829 SSD에서 DBCC CHECKDB 성능 벤치마킹 jevida(강성욱) 2016.09.30 1993
1828 Collation에 따른 ALTER DATABASE 실패 jevida(강성욱) 2016.09.30 2010
1827 LDF 파일이 잘리지 않는 이유 jevida(강성욱) 2016.09.30 2181
1826 Tempdb 경합 확인 및 해결 (Tempdb Contention) jevida(강성욱) 2016.09.30 2301
1825 SQL Server IO 병목 확인과 오해 jevida(강성욱) 2016.09.30 2683
1824 SQL Version에 따른 sp_prepare 정보 반환 jevida(강성욱) 2016.09.30 1796
1823 DReplay 활성 세션 초과 에러 jevida(강성욱) 2016.09.30 1600
1822 저장 프로시저 내 임시 테이블 사용과 프로시저 재컴파일 jevida(강성욱) 2016.09.30 2012
1821 NUMA 노드와 추척플래그 8048 jevida(강성욱) 2016.09.30 877
1820 온라인 인덱스 리빌드와 조각화 증가 jevida(강성욱) 2016.09.30 1688
1819 VARCHAR(MAX) and NTEXT 쿼리 성능 jevida(강성욱) 2016.09.30 6060
1818 CPU 리소스 상태에 따른 병렬 처리 제한 jevida(강성욱) 2016.09.30 1164
1817 매개변수 값의 변경과 SQL 서버 성능 저하 jevida(강성욱) 2016.09.30 1341
1816 IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료 jevida(강성욱) 2016.09.30 1106
1815 SQL 버전과 CLR (.NET Framework 버전에 따른 오류) jevida(강성욱) 2016.09.30 1314





XE Login