BLOB 데이터에 대한 BCP 성능 최적화


13

2TB 데이터베이스를 분할 된 테이블로 실시간 마이그레이션을 계획하는 프로세스입니다. 이 시스템은 문서 저장소를 광범위하게 말하고 있으며, 대부분의 공간은 50kb ~ 500kb 사이의 LOB에 할당되며, 500kb ~ 1MB 범위에서 적은 비율입니다. 마이그레이션의 일부에는 이전 데이터베이스에서 새 데이터베이스로의 BCP 데이터가 포함됩니다.

BCP는 데이터의 현재 / 역사적 분할이 최종 스위치 이전에 단계 (더 조용한 기간 동안)에서 오래된 데이터를 추출하여 라이브 시스템에 미치는 영향을 최소화하므로 선호되는 접근 방식입니다. 데이터의 양과 스토리지의 가용성으로 인해 파티션 구성표로의 현장 재구성이 불가능합니다 .

BLOB 내용으로 인해 ROWS_PER_BATCH 대신 KILOBYTES_PER_BATCH를 실험 해보면 약간의 성능 향상이있을 것으로 생각됩니다. BCP 문서 에서 SQL이이 값을 기반으로 작업을 최적화 할 수 있다고 제안 합니다.

찾을 수없는 것은 이러한 최적화의 특성 또는 테스트 시작 위치에 대한 지침입니다. 제안이 없으면 시작하기 위해 4 / 8 / 16 / 32 / 64mb 경계에서 단기 실행을 시도합니다.

아마도 패킷 크기 (서버 수준 설정이 아닌 BCP -a 매개 변수)를 변경하면 얻을 수있는 이점이 있지만 더 공식적인 접근 방식이 없다면이를 최대 65535로 높이는 경향이 있습니다.

답변:


12

이것은 귀하의 질문에 대한 직접적인 대답은 아니지만, 먼저 읽지 않은 경우 읽을 수있는 기사가 있습니다 :-). bcp / bulk copy를 사용하여 많은 양의 데이터를로드하는 것입니다. 나는 그것들을 모두 읽었고 KILOBYTES_PER_BATCH에 관한 세부 사항을 찾지 못했습니다. 모두 ROWS_PER_BATCH를 사용하고 있지만 다른 유용한 정보를 찾을 것이라고 확신합니다.

  • 1 시간 이내에 1TB 미만으로로드 (SQL CAT 팀에서)-여기에서 조언 목록 (인용) :

    • 사용 가능한 CPU 수만큼로드 프로세스를 실행하십시오. 32 개의 CPU가있는 경우 32 개의 병렬로드를 실행하십시오. CPU가 8 개인 경우 8 개의 병렬로드를 실행하십시오.
    • 입력 파일 작성을 제어 할 수있는 경우 병렬로 실행하려는로드 스레드 수로 균등하게 나누어지는 크기로 만드십시오. 스위치 파티션 전략을 사용하려면 모든 레코드가 하나의 파티션에 속해야합니다.
    • SQL Server 시스템에서 프로세스를 실행중인 경우 BCP 대신 BULK 삽입을 사용하십시오.
    • 테이블 파티셔닝을 사용하여 다른 8-10 %를 얻으십시오. 그러나 입력 파일이 파티셔닝 기능과 일치하도록 보장 된 경우에만 한 파일의 모든 레코드가 동일한 파티션에 있어야합니다.
    • TABLOCK을 사용하여 한 번에 행을 잠그지 마십시오.
    • 여러 스트림을 하나의 테이블로 가져 오는 경우 ROWS PER BATCH = 2500 또는 이와 비슷한 것을 사용하십시오.
  • SQL CAT 팀의 대규모 관계형 데이터웨어 하우스 구축을위한 10 가지 모범 사례 -조언 (인용) :

    • 초기 데이터로드 중에 SIMPLE 또는 BULK LOGGED 복구 모델을 사용하십시오.
    • 클러스터형 인덱스로 파티션 된 팩트 테이블을 작성하십시오.
    • 각 파티션에 대해 색인화되지 않은 스테이징 테이블을 작성하고 각 파티션을 채우기 위해 별도의 소스 데이터 파일을 작성하십시오.
    • 준비 테이블을 병렬로 채 웁니다 (여러 개의 BULK INSERT, BCP 또는 SSIS 작업 사용)
    • 각 준비 테이블에서 클러스터 된 인덱스를 작성한 다음 적절한 CHECK 제약 조건을 만듭니다.
    • 모든 파티션을 파티션 된 테이블로 전환하십시오.
    • 파티션 된 테이블에서 클러스터되지 않은 인덱스를 빌드하십시오.
  • SQL CAT 팀 의 데이터로드 성능 안내서

  • 분할 된 테이블로 대량 데이터로드-SQL Server 모범 사례 문서 (Technet 기사)

  • SQL Server 2000 증분 대량로드 사례 연구 (기술 자료 기사)

  • 대규모 패스트 트랙 POC에서 배운 교훈과 결과 (SQL CAT 팀)

  • SQL Server BCP의 성능 조정 팁 (Brad McGehee 제공)

  • 성능 영향 : 최적의 배치 크기 찾기 (Linchi Shea)

그리고 명백한 MSDN 참조 :

개인적인 경험으로, 병렬 배치 및 여러 배치 크기로 테스트를 사용하여 데이터를 빠르게로드했습니다. 개인 테스트만이 적합하다고 생각합니다. 참고 문헌에서 좋은 조언을 찾을 수 있기를 바랍니다.


Marian에게 감사합니다. 나는 그 철저한 목록에서 몇 가지 새로운 발견을 북마크했습니다. 일회성 작업으로 많은 증분 / 정제 단계가 유용하지는 않지만 사용할 수있는 팁이 많이 있습니다.
Mark Storey-Smith

그래, 나도 너의 느낌을 받는다. 나도 한 번의 과제 였고 목록에서 유용한 것들을 발견했다. 그래도 훌륭한 작업입니다 :-). Linchi Shea의 다른 기사에서와 같이 작은 .NET 응용 프로그램 (.NET에 익숙한 경우)을 수행 할 수도 있습니다. 성능 영향 : 최적의 삽입 스크립트가 BulkCopy 를 능가 할 수 없습니다 . 당신은 그가 한 것과 같은 것을 찾을 수 있습니다 :-).
Marian

BCP에 대한 BLOB 관련 지침이 전혀없는 것처럼 보이므로 귀하의 매우 철저한 답변을 수락 된 것으로 표시하고 있습니다. 다시 감사합니다.
Mark Storey-Smith

더 도와 드릴 수 없어서 죄송하지만 도움이 되셨기를 바랍니다.
Marian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.