본문 바로가기
SQL SERVER

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

by jiahn_21 2022. 2. 20.

이번시간에는 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 

댓글