현재 많은 소스에서 수 GB의 데이터를 매일 가져 오는 대용량 데이터웨어 하우스가있는 프로젝트에서 작업하고 있습니다. 우리는 다양한 형식과 구조를 가진 많은 파일을 모두 기본 테이블로 가져 와서 저장된 procs를 통해 변환/피벗합니다. 이 부분은 잘 작동합니다. 그러나 초기 수입은 매우 느립니다.대용량 가변 열 데이터 파일을 SQL Server로 옮겨서 삽입 할 때 성능 문제가 발생했습니다.
열이 파일마다 완전히 다를 수 있으므로 SSIS 파일 연결 관리자를 사용할 수 없으므로 행과 열의 데이터를 두 개의 기본 테이블로 변환하는 C#의 사용자 지정 개체 모델이 있습니다. 하나는 열 이름 용이고 다른 하나는 속성 테이블의 레코드와 관련된 각 셀의 실제 데이터 용입니다.
예 - 데이터 파일 :
alt text http://i50.tinypic.com/2ypkgf9.jpg
예 - DB 테이블 :
alt text http://i45.tinypic.com/2iqhkoy.jpg
은 SQL 삽입이에 값을 모든 데이터 행을 반복하고 추가하여 현재 수행 SQL 캐릭터 라인 이것은 큰 동적 문자열을 구성하며,이 문자열은 SqlCommand를 통해 마지막에 실행됩니다.
1MB 파일에서 실행되는 경우에도 약 1 분이 걸리기 때문에 큰 파일 (200MB 등)의 경우 한 파일을 처리하는 데 몇 시간이 걸립니다. 나는 성능 향상과 프로세스 속도 향상을 위해 인서트에 접근하는 다른 방법에 대한 제안을 찾고 있습니다.
문자열의 크기와 문자열에 나타나는 SQL 명령의 수를 줄이기 위해 루프의 구조를 할 수있는 몇 가지 방법이 있지만 이상적으로는 더 깔끔하고 견고한 방법을 찾고 있습니다. 제가 자신을 잘 설명하지 않았다면 사과 드리며, 필요한 경우 더 자세하게 설명해 드리겠습니다.
이 프로세스의 속도를 높이는 방법에 대한 아이디어가 있으십니까?
이 SSIS 패키지 최적화를 마침내 살펴볼 기회를 얻었으므로이 솔루션에 대한 정답을 변경했습니다.이 솔루션은 지금까지 최적의 솔루션을 제공했습니다. 다른 솔루션은 도움이되었고 일을 개선하여 투표했지만 투표율이 99 % 향상되었습니다. 따라서 정답으로 표시하는 것이 공정한 것처럼 보였습니다. – GShenanigan
@fat_tony 최신 독자를 위해 시간이 있다면 구현 한 최종 솔루션의 구조에 대한 자세한 내용을 나타 내기 위해 질문을 업데이트 할 수 있습니까? 내 대답은 정확한 해결책을 설명하지 못했습니다. –
좋습니다. 나는 기회를 얻었을 때 내 질문을 업데이트하고 해결책에 대해 좀 더 자세하게 설명 할 것이다. 건배에 대한 환호, 죄송합니다. 응답주기에 너무 오래 걸렸습니다! – GShenanigan