2012-01-23 2 views
0

[데이터베이스 관리자 사이트에서 크로스 게시하여 더 나은 견인력을 얻을 수 있기를 바랍니다. 나는 적절한 하나의 사이트를 업데이트 할 수 있습니다.]SQL Server 2005에서 OPENQUERY를 사용하여 저장된 proc에 대한 'total_worker_time'이 높습니다.

을 내가 가지고 다음 (명확성을 위해 단순화)

SELECT * FROM OPENQUERY(MYODBC, 'SELECT * FROM MyTable WHERE Option = ''Y'' ') 
OPTION (MAXDOP 1) 

이 시저와 같은 단일 쿼리가 포함 된 SQL 서버 2005 (SP2)에서 저장 프로 시저 (예 : 34762.196 ms) sys.dm_exec_query_stats에 높은 'total_worker_time'값이 표시되는 것을 볼 수 있습니다. 이것은 경과 시간에 가깝습니다. 그러나 SQL Management Studio에서는 예상대로 통계량이 훨씬 낮은 CPU 시간을 보여줍니다 (예 : 6828ms). 쿼리는 서버의 속도가 느려지므로 반환하는 데 약간의 시간이 걸리지 만 많은 행을 반환하지는 않습니다.

SQL Server 2005의 병렬 쿼리가 홀수 CPU 시간을 나타낼 수 있다는 점을 알고 있습니다. 그래서 나는 힌트를 사용하여 모든 패럴림을 해제하려고했습니다. 어떤 경우이든간에).

CPU 사용량을 보는 두 가지 방법이 다를 수 있다는 것과 정확한 두 가지 방법 (CPU 사용량이 더 높을 수 있다고 생각하는 다른 이유가 있음)을 설명하는 방법을 모르겠습니다. 숫자지만 측정하기 까다 롭습니다). 아무도 내게 조종 줄 수 있습니까?

업데이트 : : 문제는 OPENQUERY와 같았 기 때문에 OPENQUERY를 사용하지 않는 장기 실행 쿼리를 살펴 보았습니다. 이 경우 통계는 STATISTICS TIME ON으로 설정하여 CPU 시간을 3315ms로보고하는 반면 DMV는 0.511ms로 계산했습니다. 각 경우의 총 경과 시간이 일치했습니다.

+0

당신이 우리가 같은 결과를 얻을 수 있다면 우리가 볼 수 있도록 재현 가능한 테스트 케이스를 제공 할 수 있습니까? –

+0

나는 그렇게하려고 노력할 것이다. – Yellowfog

+0

나는 테스트 장비를 만들려고했지만, CPU 시간과 경과 시간에 진정한 차이를 얻을 수있는 유일한 방법은 사용중인 시스템에 대해 저장된 proc을 실행하는 것입니다. 인공적인 기다림은 도움이되지 않습니다. 그래서이 속성으로 테스트 장비를 만드는 방법을 알아 내려고 애 쓰고 있습니다. 적어도 여기에 게시하기에 충분히 간단합니다. – Yellowfog

답변

0

total_worker_timesys.dm_exec_query_stats은 누적 적입니다. 현재 컴파일 된 버전의 쿼리를 실행 한 총 실행 시간입니다. execution_count에서이 실행 횟수를 확인하십시오.

개별 실행시기는 last_worker_time, min_worker_time 또는 max_worker_time을 참조하십시오.

참조 : http://msdn.microsoft.com/en-us/library/ms189741.aspx

+0

예, 고맙습니다. 단일 실행만을위한 통계를보고 있다는 질문에 분명히해야합니다. 분명히 뭔가 빠져있는 것일 수도 있지만 이것은 내가 놓치고있는 분명한 사실이 아닙니다. – Yellowfog