이번시간에는 SQL SERVER에서 CPU, 실행시간, 논리적 읽기 등의 비용이 많이 발생하는 쿼리를 모니터링 하는 방법에 대해 포스팅하겠습니다.
SQL SERVER를 운영하다보면, 사용자들로부터 갑자기 속도가 느려졌다는 컴플레인이 발생하는 경우가 종종 있습니다.
이 경우 여러가지 부분을 의심해 볼 수 있는데, 데드락이 발생하여 무한 대기 상태로 인한 문제인지, 서버 CPU, 메모리 등의 성능 이슈인지 확인해볼 수 있다. 아래 내용은 SQL SERVER의 CPU가 90프로 이상 오르는 경우 원인파악을 할 수 있는 쿼리 중 하나입니다.
2022.02.14 - [SQL SERVER] - SQL SERVER 데드락(lock) 조회하기
비용 높은 쿼리 조회하기 (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;
'SQL SERVER' 카테고리의 다른 글
sql sever 메모리 최적화 테이블 만드는 방법 따라하기 ( Memory Optimized table) (0) | 2022.04.27 |
---|---|
SQL SERVER clustered index , nonclustered index (0) | 2022.04.27 |
SQL SERVER 프로파일 쿼리로 실행하기 (0) | 2022.02.16 |
SQL SERVER 데드락(lock) 조회하기 (0) | 2022.02.14 |
인덱스 페이지 확인하는 방법 (FT. DBCC IND, DBCC PAGE) (0) | 2022.02.13 |
댓글