2010-05-19 4 views
3

내에서 연결 관리 나는 다음과 SSIS 패키지가 있습니다SSIS - 루프

alt text http://www.freeimagehosting.net/uploads/5161bb571d.jpg

문제는 foreach 루프 내에서 연결이 개방되고, 각 반복 폐쇄하는 것이입니다. SQL 프로파일 러를 실행에

나는 일련의를 참조하십시오

  • 감사 로그인
  • RPC : 완료
  • 감사 로그 아웃

로그인의 기간과 실제로 수행하는 RPC 그 일은 최소한이다. 그러나 로그 아웃 기간은 매우 길어 각각 몇 초씩 실행됩니다. 이로 인해 JOB은 매우 천천히 작동합니다. 몇 시간이 걸립니다. 테스트 서버 나 독립 실행 형 랩톱에서 실행할 때도 동일한 문제가 발생합니다.

아무도 성능 향상을 위해 패키지를 어떻게 변경할 수 있습니까?

또한 Visual Studio에서 패키지를 실행할 때 호박색으로 표시된 구성 요소 블록과 녹색으로 계속 실행되지만 실제로 모든 처리가 완료되고 SQL 프로파일 러가 자동으로 중단 된 것처럼 보입니다.

감사합니다.

Rob.

답변

0

다음을 시도해 보셨습니까?

루프 내에서 사용되는 연결 관리자에서 마우스 오른쪽 단추를 클릭하고 속성을 선택하십시오. 연결 속성에서 "RetainSameConnection"을 찾아 기본값 인 False로 변경합니다. 그러면 패키지가 실행되는 동안 패키지가 연결을 유지하게됩니다. 귀하의 프로파일 러는 아마 보일 것 같은 :

  • 감사 로그인
  • RPC : 완료
  • RPC : 완료
  • RPC : 완료
  • RPC : 완료
  • RPC :
  • RPC 완료 : 완료
  • ...
  • 감사 로그 아웃

마지막 감사 로그 아웃이 패키지 실행의 마지막에 있습니다.

+0

외부 루프 및 내부 루프의 컨트롤에 대한 고유 연결 관리자를 설정하려고했습니다. 첫 번째 반복이 정상적으로 작동하면 오류가 발생합니다. [Container [40]] 오류 : 외부 열의 속성을 가져 오는 데 실패했습니다. 입력 한 테이블 이름이 없거나 테이블 개체에 대한 SELECT 권한이 없으며 연결을 통해 열 속성을 가져 오는 다른 시도가 실패했습니다. 자세한 오류 메시지는 다음과 같습니다. 공급자가 빈 스키마 테이블을 반환했습니다. System.Data.SqlClient.SqlConnection을 쿼리하여 테이블 "dbo". "CONTAINER"에 대한 열 정보를 찾을 수 없습니다. –

1

데이터 흐름 작업을 병렬 대 직렬로 실행 해 보았습니까? 각각의 'set'을 병렬로 실행할 수 있도록 for 루프를 해체 할 수 있으므로 로그인/아웃하는 데 여전히 많은 비용이 들지만 동시에 N 번 수행하게됩니다.

1

SQL Server는 단일 쿼리에서 작업 일괄 처리를 실행할 때 가장 효율적입니다. 패키지를 다시 디자인하여 for-loops를 사용하여 절차 워크 플로가 아닌 단일 호출로 업데이트를 일괄 처리 할 수 ​​있습니까?

응용 프로그램과 RPC의 디자인이 허용되거나 (또는 ​​허용하도록 리팩토링 될 수있는 경우) 성능에 가장 적합한 솔루션 일 수 있습니다.

for each Facility 
for each Stock 
    update Qty 

당신이 구조를 만들 수 있다면 같은 (SQL 또는 단일 연결로 대량 업데이트 RPC를 사용하여) : 참조 :

update Qty 
from Qty join Stock join Facility 
... 

경우, 대신 같은 예를 들어

, RPC의 구현을 제어하면 RPC는 배치 작업을 수행하는 다른 서버로 위임하여 동일한 API를 유지할 수 있지만 단일 레코드 제한을 지정합니다 (여기서 record = someRecord).