2010-06-18 1 views
4

C#에서 실행될 때마다 매 30 초가 걸리고 SQL Server Management Studio에서 즉시 실행되면 즉시 완료되는 간단한 SQL 쿼리가 있습니다. . 후자의 경우 쿼리 실행 계획은 문제가없는 것으로 드러났으며 실행 시간은 몇 가지 간단한 작업을 통해 잘 분산됩니다.C# 및 SQL Server Management Studio에서 SQL 쿼리 실행 시간이 매우 다릅니다

쿼리가 C#에서 실행되는 동안 'EXEC sp_who2'이 실행되었으며 29,000 밀리 초의 CPU 시간이 걸리고 아무것도 차단되지 않았습니다.

어떻게 해결해야할지 모르겠습니다. 누구나 통찰력을 가지고 있습니까?

쿼리는 다음과 같습니다

SELECT 
    c.lngId, 
    ... 
FROM tblCase c 
    INNER JOIN tblCaseStatus s ON s.lngId = c.lngId 
    INNER JOIN tblCaseStatusType t ON t.lngId = s.lngId 
    INNER JOIN [Another Database]..tblCompany cm ON cm.lngId = cs.lngCompanyId 
WHERE t.lngId = 25 
    AND c.IsDeleted = 0 
    AND s.lngStatus = 1 
+1

매개 변수 스니핑 또는 다른 SET 옵션 일 가능성이 큽니다. 저장 프로 시저입니까? 문제 해결을 위해 SQL 프로파일 러 또는'sys.dm_exec_query_plan'을 사용하여 C# 1의 실행 계획을 가져 와서 Management Studio와 비교하십시오. –

+1

이 단일 쿼리 또는 저장 프로 시저가 있습니까? SQL 프로파일 러 도구를 사용하여 응용 프로그램에서 쿼리가 실행되는 동안 자세한 추적을 실행하여 동일한 데이터베이스 명령이 실행되고 있는지 확인하고 이러한 방식으로 실행될 때 쿼리를 수행하는 데 걸리는 시간을 정확히 확인합니다. – NYSystemsAnalyst

+0

현재 저장 프로 시저가 아니므로 컴파일 문제가 없어야합니다. 다른 SET 옵션이있을 수 있습니다. 나는 옵션이 양면에 기본값이라고 생각합니다. – Paul

답변

5

,로 시작하는 쿼리의 쿼리 계획을 추출하려면 C 번호에서 실행될 때 :

select p.query_plan, * 
from sys.dm_exec_requests r 
cross apply sys.dm_exec_query_plan(r.plan_handle) p 
where r.session_id = <spid of C# connection> 

는 그 다음 SSMS 세션에서 실행 계획과 비교 (간단히 도구 모음에서 실제 계획보기를 클릭하십시오).

일반적으로 항상 추측보다는 체계적인 접근 방식을 적용하려고합니다. Wait and Queues은 SQL Server에 대한 성능이 우수한 테스트 방법입니다.