SQL SERVER

SQL SERVER 비용이 높은 쿼리 보기 (fT. dm_exec_query_stats)

jiahn_21 2022. 2. 20. 14:50

이번시간에는 SQL SERVER에서 CPU, 실행시간, 논리적 읽기 등의 비용이 많이 발생하는 쿼리를 모니터링 하는 방법에 대해 포스팅하겠습니다. 

 

SQL SERVER를 운영하다보면, 사용자들로부터 갑자기 속도가 느려졌다는 컴플레인이 발생하는 경우가 종종 있습니다.

이 경우 여러가지 부분을 의심해 볼 수 있는데, 데드락이 발생하여 무한 대기 상태로 인한 문제인지, 서버 CPU, 메모리 등의 성능 이슈인지 확인해볼 수 있다. 아래 내용은 SQL SERVER의 CPU가 90프로 이상 오르는 경우 원인파악을 할 수 있는 쿼리 중 하나입니다. 

 

2022.02.14 - [SQL SERVER] - SQL SERVER 데드락(lock) 조회하기

 

SQL SERVER 데드락(lock) 조회하기

오늘은 SQL SERVER의 데드락을 확인하는 방법에 대해 포스팅하겠습니다. 많이 아시는 방법으로는 sp_lock을 사용하여 조회하는 방법도 있지만, 보기 편하게 조작하기 위해 아래쿼리를 활용하면 업무

pdw5544.tistory.com

 

비용 높은 쿼리 조회하기 (CPU, IO, DURATION) 

dm_exec_query_stats 테이블을 활용하여 각종 통계 데이터를 볼 수 있습니다. 

아래 쿼리를 활용하여 다양한 값을 확인할 수 있습니다. 

 

SELECT TOP 5 query_stats.query_hash AS 'Query Hash',   
    SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS 'Avg CPU Time',  
	SUM(query_stats.total_logical_reads) / SUM(query_stats.execution_count) AS 'Avg logical Read',
	SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS 'Avg Worker time',
    MIN(query_stats.statement_text) AS 'Statement Text'
FROM   
    (SELECT QS.*,   
    SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,  
    ((CASE statement_end_offset   
        WHEN -1 THEN DATALENGTH(ST.text)  
        ELSE QS.statement_end_offset END   
            - QS.statement_start_offset)/2) + 1) AS statement_text  
FROM sys.dm_exec_query_stats AS QS  
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats  
GROUP BY query_stats.query_hash  
ORDER BY 2 DESC;

ms docs


참조 : https://www.google.com/search?q=sql+server+dm_exec_query_stats&oq=sql+server+dm_exec_query_stats&aqs=chrome..69i57j0i30l2j0i8i30l7.3823j0j7&sourceid=chrome&ie=UTF-8