SSIS 데이터 흐름 데이터 액세스 모드- '테이블 또는 뷰'와 빠른로드의 요점은 무엇입니까?


9

SQL Server Business Intelligence Development Studio를 사용하여 데이터를 SQL Server 테이블로 가져 오기 위해 OLE DB 대상 데이터 흐름에 대해 많은 플랫 파일을 수행합니다. OLE DB 대상 편집기의 "데이터 액세스 모드"에서 "테이블 또는 뷰-빠른로드"가 아닌 "테이블 또는 뷰"로 기본 설정됩니다. 차이점은 무엇입니까? 내가 알 수있는 유일한 차이점은 빠른로드가 데이터를 훨씬 빠르게 전송한다는 것입니다.

답변:


13

OLE DB 대상 구성 요소의 데이터 액세스 모드는 빠르거나 빠르지 않은 두 가지 방식으로 제공됩니다.

"테이블 또는 뷰-빠른로드"또는 "테이블 또는 뷰 이름 변수-빠른로드"는 데이터가 설정된 방식으로로드됨을 의미합니다.

느리게- "테이블 또는 뷰"또는 "테이블 또는 뷰 이름 변수"는 SSIS가 데이터베이스에 싱글 톤 삽입 문을 발행하게합니다. 10, 100, 심지어 10000 행을로드하는 경우 두 방법 사이에 눈에 띄는 성능 차이가 거의 없습니다. 그러나 언젠가는 약간 까다로운 요청으로 SQL Server 인스턴스를 포화 상태로 만들 것입니다. 또한 트랜잭션 로그에서 도용을 남용 할 것입니다.

왜 빠른 방법을 원하지 않습니까? 나쁜 데이터. 10000 행의 데이터를 보내고 9999 번째 행의 날짜가 2015-02-29이면 10k 원자 삽입 및 커밋 / 롤백이 있습니다. Fast 방법을 사용하는 경우 10k 행의 전체 배치가 모두 저장되거나 저장되지 않습니다. 그리고 어떤 행에서 오류가 발생했는지 알고 싶다면 가장 낮은 수준의 입도는 10k 행입니다.

이제는 가능한 한 빨리 많은 데이터를로드하고 더티 데이터를 처리하는 방법이 있습니다. 그것은이다 계단식 실패 접근 방식과는 같이 보입니다

계단식 오류 삽입

아이디어는 한 번에 가능한 한 많이 삽입 할 수있는 올바른 크기를 찾는 것이지만 잘못된 데이터를 얻는 경우 데이터를 연속적으로 작은 배치로 다시 저장하여 잘못된 행에 도달하려고합니다. 여기서는 최대 삽입 커밋 크기 (FastLoadMaxInsertCommit)를 10000으로 시작했습니다. 오류 행 처리 Redirect Row에서에서로 변경합니다 Fail Component.

다음 목적지는 위와 동일하지만 빠른로드를 시도하고 100 행의 배치로 저장합니다. 다시 말하지만, 적당한 크기로 테스트하거나 준비하는 것이 좋습니다. 그 결과 어딘가에 알기 때문에 100 개의 행으로 100 개의 배치가 전송 됩니다. 테이블의 무결성 제약 조건을 위반 한 행이 하나 이상 있습니다.

그런 다음 믹스에 세 번째 구성 요소를 추가합니다. 이번에는 일괄 처리로 1을 저장합니다. 또는 동일한 결과를 얻을 수 있으므로 빠른 액세스 버전에서 테이블 액세스 모드를 변경할 수 있습니다. 우리는 각 행을 개별적으로 저장하여 단일 불량 행으로 "무언가"를 수행 할 수 있습니다.

마지막으로 비상 안전 대상이 있습니다. 아마도 대상과 "동일한"테이블 일 수도 있지만 모든 열은로 선언됩니다 nvarchar(4000) NULL. 해당 테이블에서 결과가 무엇이든 조사하고 정리 / 삭제하거나 나쁜 데이터 분석 프로세스가 무엇이든해야합니다. 다른 사람들은 플랫 파일로 덤프하지만 실제로는 잘못된 데이터 작업을 추적하는 방법에 적합한 모든 것이 있습니다.


5

빠른로드는 빠른로드 옵션에 잘 설명되어 있습니다.

  • 가져온 데이터 파일에서 ID 값을 유지하거나 SQL Server에서 할당 한 고유 값을 사용하십시오.

  • 벌크로드 조작 중에 널값을 유지하십시오.

  • 대량 가져 오기 조작 중 대상 테이블 또는 뷰의 제한 조건을 확인하십시오.

  • 벌크로드 조작 동안 테이블 레벨 잠금을 확보하십시오. 배치의 행 수와 커밋 크기를 지정하십시오.


차이점은 무엇입니까? 내가 알 수있는 유일한 차이점은 빠른로드가 데이터를 훨씬 빠르게 전송한다는 것입니다.

후드 아래에서 table or view삽입 할 모든 행에 대해 개별 SQL 명령을 table or view - with fast load사용하고 BULK INSERT 명령을 사용합니다.

BULK INSERT 에서 사용할 수있는 위의 옵션이 표시되면 예를 들어 number of rows in the batch= ROWS_PER_BATCHcommit size=BATCHSIZE

또 다른 시나리오는 ..

기본 최대 삽입 커밋 크기 (2147483647)가 너무 높습니다. 예를 들어 500K 행을 삽입하고 PK 위반으로 인해 배치가 실패합니다. 이 시나리오에서는 FAST LOAD 옵션을 사용하면 전체 배치가 실패합니다. 오류 설명도 얻을 수 없습니다.

여기에서 table or view대상 오류 출력으로 사용할 수 있습니다 . 따라서 500K 중에서 삽입 커밋 크기 5K부터 FAST LOAD를 사용합니다. 해당 배치의 1 행이 실패하면 5K 배치를 table or view로드로 리디렉션합니다 .5K 행에 대해서만 행 단위 삽입을 사용 table or view하고 플랫 파일로 오류를 리디렉션 할 수 있습니다 . 5K 인 경우 오류의 원인을 정확히 파악할 수 있습니다.

위의 방법의 장점은 행 중 하나라도 실패하지 않으면 전체 배치에 대해 BULK INSERT (고속로드)를 사용한다는 것입니다.

SSIS 애호가 billinkc 는 Stackoverflow에 대해 비슷한 질문에 답변했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.