SQL Server 2008에서 최악의 수행 쿼리를 찾는 방법은 무엇입니까? SQL Server 2008에서 최악의 성능을 보이는 쿼리를 찾는 방법은 무엇입니까?
나는 다음과 같은 예를 발견했지만 작동하지 않는 것 :http://www.sqlservercurry.com/2010/03/top-5-costly-stored-procedures-in-sql.html
SQL Server 2008에서 최악의 수행 쿼리를 찾는 방법은 무엇입니까? SQL Server 2008에서 최악의 성능을 보이는 쿼리를 찾는 방법은 무엇입니까?
나는 다음과 같은 예를 발견했지만 작동하지 않는 것 :http://www.sqlservercurry.com/2010/03/top-5-costly-stored-procedures-in-sql.html
10 최악의 쿼리를 쿼리 ... : 당신이 촬영 시간을 기준으로 최악의 성능 쿼리를 찾으려면
SELECT TOP 10
total_worker_time/execution_count AS Avg_CPU_Time
,execution_count
,total_elapsed_time/execution_count as AVG_Run_Time
,(SELECT
SUBSTRING(text,statement_start_offset/2,(CASE
WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), text)) * 2
ELSE statement_end_offset
END -statement_start_offset)/2
) FROM sys.dm_exec_sql_text(sql_handle)
) AS query_text
FROM sys.dm_exec_query_stats
--pick your criteria
ORDER BY Avg_CPU_Time DESC
--ORDER BY AVG_Run_Time DESC
--ORDER BY execution_count DESC
는 SQL 프로파일 러
SELECT TOP 5 obj.name, max_logical_reads, max_elapsed_time
FROM sys.dm_exec_query_stats a
CROSS APPLY sys.dm_exec_sql_text(sql_handle) hnd
INNER JOIN sys.sysobjects obj on hnd.objectid = obj.id
ORDER BY max_logical_reads DESC
가에서 촬영 SQL 프로파일 러 (라이브 데이터베이스 선호).
프로파일 러를 실행하는 것은 확실히 좋은 첫 번째 옵션입니다. 일단 프로파일 러 기능을 잘 이해하면 추적을 실행할 수 있습니다. –
프로덕션 서버 자체에서 너무 오랫동안 프로파일 러를 실행하지 마십시오. 기본 모드에서는 리소스 호그입니다. –
, 나는이를 사용하십시오 :
SELECT *
FROM sys.dm_exec_query_stats a
CROSS APPLY sys.dm_exec_sql_text(sql_handle) hnd
ORDER BY total_elapsed_time/execution_count DESC
그러나, "최악의"쿼리를 찾는 것은 종종 exec_query_stats
DMV에 프로빙 좀 더 필요합니다. 고려해야 할 사항이 많이 있습니다.
total_worker_time/execution_count
이제 이러한 쿼리는 성능이 좋지 않은 쿼리를 강조하지만 종종 "공정한"성능의 쿼리가있을 수 있지만 매우 자주 호출되어 앱의 전반적인 성능을 저하시킵니다. 이를 찾으려면 위의 쿼리를 total_elapsed
시간 (또는 total_[whatever metric you are interested in]
)까지 주문하고 execution_count
으로 나누지 마십시오.
This MSDN Magazine 기사는이 항목에 대한 훌륭한 정보를 제공합니다.
+1 멋진 기사! –
우수 기사 +1이 2008 년 문제가 발생했습니다. –
@ThomasBratt 해당 쿼리를 실행하려면 데이터베이스의 호환성 수준을 변경해야 할 수 있습니다. 나는 그랬다. –
+1 나를 위해 꽤 잘 작동합니다.반환 된 행에서 일부 중복 것으로 보이지만 올바르게 보입니다. –
중복 된 행은 무효화 된 쿼리 계획의 이전 버전 일 수 있습니다 (다양한 이유, 통계 변경이 일반적인 것임). 계획이 배출되지 않았습니다. 무효화되면서 메모리에 저장됩니다. 또 다른 이유는 다른 매개 변수를 가진 많은 유사한 쿼리가 캐시에있을 수 있고 임시 SQL이 아닌 저장 프로 시저에서 발생하지만 그렇지 않을 때 많은 복제본처럼 보이는 매개 변수화 (또는 부족) 일 것입니다. – Andrew
@KM : 약간의 대체 답변을 추가하십시오. sys.dm_exec_query_plan에 가입하고 쿼리 계획을 가져 오는 방법 - 항상 최악의 수행으로 캐시에서 추출 할 가치가 있습니다. – Andrew