0

PRIMARY FILE GROUP을 포함하여 10 개의 파티션이있는 Sql Server 데이터베이스에 1,000,000 개의 레코드가 포함 된 2.5GB의 데이터를 내보내는 SSIS 패키지가 있습니다. "일괄 처리"및 "최대 삽입 커밋 크기"에 대해 SSIS 패키지와 관련이 있습니까?

기본 최대 삽입 크기 즉 "2147483647"및 .IT가 빠른로드 옵션을 완료 변환에 7 분을 복용했다 배치 당 행을 커밋 변경하기 전에.

그러나 일부 공식을 사용하여 값을 변경 한 후 실행은 2 분 만에 완료되었습니다.

FYI- DefaultMaxBufferRows를 & DefaultMaxBufferSize에는 각각 두 scenorio 즉 만 10 MB 단위 디폴트 값이었다.

최대 삽입 calucation 아래 를 사용하는 배치에 따라 크기를 & 행을 커밋 계산합니다.

1) 전송되는 원본 레코드의 계산 된 길이. 이는 약 1038 바이트입니다.

CREATE TABLE [dbo].[Game_DATA2](
    [ID] [int] IDENTITY(1,1) NOT NULL, -- AUTO CALCULATED 
    [Number] [varchar](255) NOT NULL, -- 255 bytes 
    [AccountTypeId] [int] NOT NULL, -- 4 bytes 
    [Amount] [float] NOT NULL,-- 4 bytes 
    [CashAccountNumber] [varchar](255) NULL, -- 255 bytes 
    [StartDate] [datetime] NULL,-- 8 bytes 
    [Status] [varchar](255) NOT NULL,-- 255 bytes 
    [ClientCardNumber] [varchar](255) NULL -- 255 bytes 
) 

2) 배치 당 행 = packate_size/레코드 당 바이트 = 32767/1038 = 32 약.

3) 최대 인서트 커밋 크기 = packate 크기 * 트랜잭션의 수 = 32767 * 100 = 3,276,700 (Packate 크기와 수 거래 변수)의 요구 사항에 따라 변경할 수있다

질문 :

  • 배치 당 행의 관련성과 최대 삽입 커밋 크기가 있습니까? DFT (DATA FLOW TASK) 실행을 튜닝하기 위해 아카이브 article에 언급 된 정보가 없기 때문입니다.

  • 이러한 구성은 DefaultBuffermaxzie 및
    DefualtBuffermaxrows와 함께 작동합니까? 그렇다면 어떻게해야합니까?

답변

1

이 매개 변수는 DFT OLE DB 대상만을 참조합니다. OLE DB 대상에서 insert bulk 명령을 실행합니다. 이 두 매개 변수는 다음과 같은 방법으로 그것을 제어 :

  • 최대 삽입 크기 커밋 - 많은 데이터가 하나의 배치에 삽입하는 방법을 제어합니다. 따라서 MICS가 5000으로 설정되고 9000 개의 행이 있고 처음 5000 개의 결과에서 오류가 발생하면 5000의 전체 배치가 롤백됩니다. MISC는 BULK INSERT transact-sql 명령의 BATCHSIZE 인수와 동일합니다.
  • 행 당 행 - 쿼리 최적화 프로그램에 대한 힌트 일뿐입니다. 이 값은 실제 예상 행 수로 설정되어야합니다. RPB는 BULK INSERT transact-sql 명령에 대한 ROWS_PER_BATCH 인수와 동일합니다.
    MICS 값을 지정하면 몇 가지 효과가 있습니다. 각 일괄 처리는 트랜잭션 로그로 복사되므로 트랜잭션 로그가 빠르게 증가하지만 각 일괄 처리 후에 해당 트랜잭션 로그를 백업 할 수 있습니다.또한 큰 일괄 처리를 사용하면 대상 테이블에 인덱스가있는 경우 메모리에 부정적인 영향을 미치고 테이블 잠금을 사용하지 않는 경우 더 많은 블로킹이 발생할 수 있습니다.

MS Article이 명령에.

DefaultBuffermaxsize 및 DFT 자체 내부 DefualtBuffermaxrows 제어 RAM 버퍼 관리, 위에서 언급 한 옵션 간섭이 없다.

+0

실제 예상 행 수가 1,000 만 개 인 파일의 RPB 값은 무엇입니까? 위 공식을 사용할 수 있습니까? 아니면 ** 시도 및 오류 ** 기본 방법입니다. –

+0

@HarsimranjeetSingh, RPB 기본값을 그대로두면 삽입 할 때 실제 행 번호로 설정되므로 OLE DB가 자동으로 수행합니다. 위에 설명 된 제한 사항을 설정할 수 있습니다. 귀하의 경우에 나는 먼저 MICS와 함께 놀 것입니다. – Ferdipux

0

친애하는 Harsimranjeet Singh;

내 개인적인 경험을 기반으로, ROWS_PER_BATCH는 DefualtBuffermaxrows 있도록 SSIS 서버의 사양에 의존하고 ROWS_PER_BATCH는 대상 서버에 의존하고, DefualtBuffermaxrows은 DFT의 bacth의 크기를 결정하는 반면 oledb_destination는 DFT 구성 요소에서받을해야 함을 배치 당 행의 수를 결정 각각은 그들의 조건으로 설정되어야합니다.

또한 Maximum_Insert_Commit_Size는 숫자를 눌렀을 때 레코드 수를 결정한 다음 로그 파일에 기록하고 커밋합니다. 이 숫자를 줄이면 로그에 대한 참조 횟수가 늘어나고 이것이 나쁘지 만 MSDB (시스템 데이터베이스)가 팽창하지 않아 성능이 향상됩니다.

또 다른 포인트는 DefualtBuffermaxrows와 DeafultBufferSize 사이의 관계이며 함께 설정해야합니다. DefualtBuffermaxrows에 각 레코드의 크기를 곱한 값은 DeafultBufferSize와 거의 같아야합니다.이 값이 더 크면이 값에 도달하는 데 걸리는 양을 줄이고 최소 버퍼 크기보다 작고 작 으면 최소 버퍼 크기를 늘리십시오. 이러한 작업은 패키지 성능을 심각하게 저하시킵니다.

행운을 빌어 요!