2010-02-24 2 views
3

int 매개 변수를 제외하고 SQL Server 2008에 저장된 proc 파일이 있습니다. 다른 저장된 procs를 호출하고 quires를 중첩합니다.SQL 서버 저장된 proc 시간 초과 및 쿼리 시간 초과하지 않는 이유는 무엇입니까?

내가 직면하고있는 문제는 SQL 서버 관리 스튜디오에서 프로 시저를 실행하면 실행되지 않고 시간이 초과된다는 것입니다.

다른 SQL 서버 관리 스튜디오에서 별도로 저장된 proc을 쿼리를 실행하면 모든 것이 올바르게 실행됩니다.

문제점을 디버그 할 수 없습니다. 이 도움이되는 정보를 얻을 수있는 도움이나 조언을 주시면 감사하겠습니다. 사전에

감사

(proc 디렉토리 또는 쿼리를 실행할 때 나는 같은 자격 증명을 useing입니다).

답변

6

parameter sniffing 일 수 있습니다.

sproc 매개 변수를 로컬 변수에 할당하고 sproc 내의 쿼리에있는 매개 변수를 대신 사용해보십시오.

CREATE PROCEDURE [TestSproc] 
    @Param1 INTEGER 
AS 
BEGIN 
DECLARE @Param1_LOCAL INTEGER 
SET @Param1_LOCAL = @Param1 

SELECT Something 
FROM Somewhere 
WHERE SomeField = @Param1_LOCAL 
END 
+0

은 매력처럼 작동합니다. 링크를 통해 스캔했습니다. 매개 변수가 광범위 할 때 매개 변수 스니핑을 비활성화해야 할 수도 있습니다. 필자의 경우이 SP는 항상 하나의 매개 변수 범위 (1 ~ 8)로 실행되었습니다. 지역 변수를 할당하는 트릭이 작동하는 것처럼 보이지만 그 이유를 이해하지 못합니까? – dotnetcoder

+0

SQL Server가 매개 변수 스니핑을 사용하지 않도록 설정하여 통계를 기반으로하는 "일반적인 용도"(더 나은 구가 필요함) 실행 계획을 찾습니다. – AdaTheDev