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;