2017-01-21 2 views
0

저장 프로 시저 1에는 레코드 세트를 반환하는 선택 쿼리가 있으며 특정 날짜가 지정됩니다. 그 레코드 세트를 통과하기 위해 커서를 사용하고 있으며 다른 행에 대해 다른 저장 프로 시저가 호출됩니다.행별 행 작업에 대한 커서의 대체

저장 프로 시저 2는 커서의 각 값에 대해 약 20K 행을 표에 삽입합니다.

커서에 약 100 개의 레코드가 있으므로 삽입 된 총 행 수는 200K가되므로 프로덕션 환경에서 중지 될 때까지 며칠 동안 쿼리가 실행됩니다.

동일한 쿼리에는 약 8 분이 소요됩니다.

SSIS (dev)에서 foreach 컨테이너를 사용해 보았는데 현재 (dev) 5 분이 걸렸습니다.

이러한 레코드를 더 빨리 삽입 할 수 있습니까?

테이블 값 함수를 사용하는 것으로 생각했지만 두 레코드 간의 조인은 첫 번째 레코드 집합에 날짜 만 포함되어 있기 때문에 어렵습니다.

+0

프로덕션 및 dev에서 데이터 양이 동일합니까? 그렇다면 왜 더 느린가요? –

+1

커서 안에도 200k 개의 행을 삽입하는 데 일 걸리지 않아야합니다. –

+0

시스템 사용률이 거의 0이더라도 프로덕션 시스템에서 동일한 성능을 보입니까? –

답변

0

저장 프로 시저 2를 수행하면 대량 삽입물을 살펴 보는 것이 좋습니다.

참조 : https://www.simple-talk.com/sql/learn-sql-server/bulk-inserts-via-tsql-in-sql-server/

또한 부하의 최적의 성능을 보장하기 위해 인덱스 및 자극 환경의 구성을 검토 할 수 있습니다. 위의 링크는 삽입 성능을 향상시키는 방법에 대한 몇 가지 제안 사항이 있습니다.

확실히 읽을 가치가 있습니다.