SQL Server에서 SQL 문장 단위로 Elapsed Time
(전체 소요 시간)과 Disk I/O
(Physical Reads)를 함께 확인하는 쿼리는 다음과 같이 구성할 수 있습니다.
✅ 목적: SQL 별 소요 시간 + 디스크 I/O 한눈에 보기
sql복사편집SELECT
TOP 50
st.text AS sql_text,
qs.execution_count,
qs.total_elapsed_time / 1000 AS total_elapsed_ms,
(qs.total_elapsed_time / qs.execution_count) / 1000 AS avg_elapsed_ms,
qs.total_worker_time / 1000 AS total_cpu_ms,
qs.total_logical_reads AS logical_reads,
qs.total_physical_reads AS physical_reads,
qs.total_logical_writes AS logical_writes,
qs.creation_time,
qs.last_execution_time
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY
sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY
qs.total_physical_reads DESC; -- 또는 avg_elapsed_ms DESC
✅ 설명
컬럼 | 설명 |
---|---|
sql_text | SQL 문장 (최대 4KB) |
execution_count | 실행 횟수 |
total_elapsed_ms | 총 실행 시간 (ms) |
avg_elapsed_ms | 평균 실행 시간 |
total_cpu_ms | 총 CPU 사용 시간 (ms) |
physical_reads | 디스크에서 읽은 횟수 (Disk I/O) |
logical_reads | 메모리에서 읽은 횟수 |
logical_writes | 메모리 → 디스크로 쓴 횟수 |
creation_time | 처음 실행된 시간 |
last_execution_time | 마지막으로 실행된 시간 |
✅ 팁: 실행 시간 기준 정렬 변경
- 디스크 I/O가 높은 쿼리:
ORDER BY qs.total_physical_reads DESC
- 실행 시간이 오래 걸리는 쿼리:
ORDER BY avg_elapsed_ms DESC
- CPU를 많이 쓰는 쿼리:
ORDER BY total_cpu_ms DESC
✅ 특정 SQL 추적 (원하면 추가)
query_hash
, sql_handle
, 또는 SQL 텍스트 기준으로 특정 쿼리만 추적하고 싶다면 WHERE 조건을 추가하시면 됩니다.
예:
sql복사편집WHERE st.text LIKE '%your_table_name%'