코드를 실행하는 데 약 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
내가 말하는 것처럼 그것을 전혀 시간이 없다.
내가 누락 된 부분이 있습니까?
아니요, 코드를 실행 중입니다.이 코드는 SPRLC의 "AS BEGIN"다음에 나오는 코드입니다.이 코드는 CTRL + A, CTRL + V가 아니라 여기에 있습니다. 또한 개별 SPROCS는 감사 기록을 가지고 있으며 감사 로그가 업데이트되고 있으므로 100 %는 자식 sprocs가 호출되고 있음을 알고 있습니다. –
동일한 출력을 얻습니까? 나는 네가하는 일을 추측하고 있지만, 그럴만한 가치가있다. – PhillipH