2016-06-25 5 views
-1

코드를 실행하는 데 약 20 초 정도 소요되는 저장 프로 시저가 있습니다. 코드를 SSMS에 직접 복사하면 < 1s로 실행됩니다. 이제는 코드가 실제로 다른 20 개의 저장 프로 시저를 실행한다는 복잡성이 있습니다. 기본 저장 프로 시저는 다른 저장 프로 시저를 호출하는 것 외에도 많은 것을하지 않습니다.저장 프로 시저가 SSMS보다 훨씬 느린 코드 실행

필자는 매개 변수 스니핑을 읽었으며이를 처리하기 위해 코드를 변경했습니다. 아무런 영향을주지 않았습니다. 나는 또한 메인 스토어드 프로 시저를 호출 할 때와 다른 모든 스토어드 프로 시저를 호출 할 때 '재 컴파일'힌트를 시도했다.

그 밖의 무엇입니까?

그래서 내 호출이 저장 프로 시저는 다음과 같습니다 : 나는 SSMS로 위의 마스터 저장 프로 시저의 코드를 복사 (코드 상단에있는 inPmq_ID 설정)을 실행하면

CREATE PROCEDURE [dbo].[spr_DoPersonMatch] 
    @inPmq_ID bigint     -- Passed in pending match ID 
AS 
BEGIN 
    SET NOCOUNT ON; 

    declare @pmq_ID bigint 
    set @pmq_ID = @inPmq_ID 
    declare @Total_match_count as int = 0 
    declare @match_rule as int 
    declare @AuditMatch as bit = 0 

    -- Match Rule 1 - FORENAME & SURNAME & NINO & either (NHSNO or UPN) 
    exec dbo.spr_DoPersonMatchRule1 @pmq_ID,@AuditMatch ,@match_count = @Total_match_count output 
    if @Total_match_count > 0 set @match_rule = 1 

    -- Match Rule 2 - FORENAME & SURNAME & NINO & either (NHSNO or UPN) 
    if @Total_match_count < 1 -- If we have a match, do not do any more matches. Drop through 
    BEGIN 
     exec dbo.spr_DoPersonMatchRule2 @pmq_ID,@AuditMatch ,@match_count = @Total_match_count output 
     if @Total_match_count > 0 set @match_rule = 2 
    END 

내가 말하는 것처럼 그것을 전혀 시간이 없다.

내가 누락 된 부분이 있습니까?

답변

0

실제로 SSMS에서 SPROC을 실행 하시겠습니까? 프로그래머가 실제로 CREATE PROCEDURE 스크립트를 실행하고 기본 저장 프로 시저를 실행하지 않는다는 것을 잊어 버린 실수를 보았습니다. 게시물을 읽으면 "코드를 SSMS에 복사하면됩니다"라고 말하면서 그대로 사용한 경우 쿼리가 proc을 빌드하지만 실행하지는 않습니다.

+0

아니요, 코드를 실행 중입니다.이 코드는 SPRLC의 "AS BEGIN"다음에 나오는 코드입니다.이 코드는 CTRL + A, CTRL + V가 아니라 여기에 있습니다. 또한 개별 SPROCS는 감사 기록을 가지고 있으며 감사 로그가 업데이트되고 있으므로 100 %는 자식 sprocs가 호출되고 있음을 알고 있습니다. –

+0

동일한 출력을 얻습니까? 나는 네가하는 일을 추측하고 있지만, 그럴만한 가치가있다. – PhillipH