데이터베이스/SQL Server
최근 Plan Cache Object 조회
발가락
2009. 8. 27. 10:23
728x90
MSSQL이 쿼리 컴파일 부하를 줄이려고 노력한 것이
상당히 귀찮은 일들을 불러들이는군요.
캐시 오브젝트는 최근 실행순으로 정렬됩니다.
아래 URL에서 코드를 정리했습니다.
알 수 있는 정보
상당히 귀찮은 일들을 불러들이는군요.
캐시 오브젝트는 최근 실행순으로 정렬됩니다.
아래 URL에서 코드를 정리했습니다.
SELECT
qs.last_execution_time
, qs.creation_time
, SUBSTRING
( sqltxt.text
, qs.statement_start_offset / 2 + 1
, ( CASE
WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), sqltxt.text)) * 2
ELSE qs.statement_end_offset
END
- qs.statement_start_offset
) / 2 + 1
) "cropped_text"
, qs.execution_count , sqlplan.query_plan , qs.plan_generation_num
, qs.total_worker_time , qs.last_worker_time , qs.min_worker_time , qs.max_worker_time
, qs.total_physical_reads , qs.last_physical_reads , qs.min_physical_reads , qs.max_physical_reads
, qs.total_logical_writes , qs.last_logical_writes , qs.min_logical_writes , qs.max_logical_writes
, qs.total_logical_reads , qs.last_logical_reads , qs.min_logical_reads , qs.max_logical_reads
, qs.total_clr_time , qs.last_clr_time , qs.min_clr_time , qs.max_clr_time
, qs.total_elapsed_time , qs.last_elapsed_time , qs.min_elapsed_time , qs.max_elapsed_time
, sqlplan.encrypted , qs.sql_handle , qs.plan_handle , sqltxt.text "raw_text"
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) sqltxt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) sqlplan
ORDER BY qs.last_execution_time DESC;
qs.last_execution_time
, qs.creation_time
, SUBSTRING
( sqltxt.text
, qs.statement_start_offset / 2 + 1
, ( CASE
WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), sqltxt.text)) * 2
ELSE qs.statement_end_offset
END
- qs.statement_start_offset
) / 2 + 1
) "cropped_text"
, qs.execution_count , sqlplan.query_plan , qs.plan_generation_num
, qs.total_worker_time , qs.last_worker_time , qs.min_worker_time , qs.max_worker_time
, qs.total_physical_reads , qs.last_physical_reads , qs.min_physical_reads , qs.max_physical_reads
, qs.total_logical_writes , qs.last_logical_writes , qs.min_logical_writes , qs.max_logical_writes
, qs.total_logical_reads , qs.last_logical_reads , qs.min_logical_reads , qs.max_logical_reads
, qs.total_clr_time , qs.last_clr_time , qs.min_clr_time , qs.max_clr_time
, qs.total_elapsed_time , qs.last_elapsed_time , qs.min_elapsed_time , qs.max_elapsed_time
, sqlplan.encrypted , qs.sql_handle , qs.plan_handle , sqltxt.text "raw_text"
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) sqltxt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) sqlplan
ORDER BY qs.last_execution_time DESC;
알 수 있는 정보
- 쿼리가 매개변수화 되었는가
- 플랜 확인
- 부하가 어느정도 되는가
- 재사용이 되는가