실행 했던 쿼리 실행계획
지금 당장 실행할 쿼리의 실행계획을 알아보는거야 뭐 너무나 쉽지만
이미 실행되었던 쿼리들에 대해서 실행계획을 찾으려면 캐시된 쿼리들에 한하여 실행계획을 찾아 볼 수 있다.
SYS.DM_EXEC_QUERY_STATS 라는 시스템 뷰에 남아있는 sql_handle / plan_handle을 통해 찾아보는 쿼리에 대해 알아보자.
Query
select s.creation_time,
s.last_execution_time,
s.execution_count,
substring(t.text,
(s.statement_start_offset/2) + 1,
((case s.statement_end_offset
when -1 then datalength(t.text)
else s.statement_end_offset
end - s.statement_start_offset)/2) + 1) as query_text,
t.text,
p.query_plan
from SYS.DM_EXEC_QUERY_STATS s
cross apply SYS.DM_EXEC_SQL_TEXT(s.sql_handle) t
cross apply SYS.DM_EXEC_QUERY_PLAN(s.plan_handle) p
where t.text like '%[찾고 싶은 쿼리]%'
쿼리 자체는 간단하다.
시스템 동적 관리 뷰 3가지를 조합하여 캐시되어있는 쿼리와 해당 쿼리의 텍스트, 플랜을 찾는 것이다.
* creation_time : 쿼리가 처음 컴파일되어 캐시 된 시간
* last_execution_time : 쿼리가 마지막으로 실행 된 시간
* execution_count : 캐시 된 이후 실행된 건수
* query_text : 실행 된 쿼리 블록
* text : 전체 쿼리
* query_plan : 실제 실행 된 쿼리의 실행계획
시스템 동적 관리 뷰
SYS.DM_EXEC_QUERY_STATS는 SQL Server에 캐시된 쿼리의 집계를 알려주는 시스템 동적 관리 뷰이다.
sql_handle / plan_handle 과 같은 쿼리와 플랜을 식별하는 토큰과 쿼리블럭의 시작/종료 offset 쿼리의 실행 통계등이 담겨있다.
SYS.DM_EXEC_SQL_TEXT는 sql_handle을 통해 각 SQL을 식별하여 SQL 텍스트를 반환한다.
SYS.DM_EXEC_QUERY_STATS의 statement_start_offset / statement_end_offset와 조합하여 쿼리 블록을 찾을 수 있다.
SYS.DM_EXEC_QUERY_PLAN는 plan_handle을 통해 XML 형식으로 실행 계획을 반환한다.
query_plan 컬럼이 null 값 일 경우 아직 쿼리의 처리가 완료되지 않은 것 이다.
'DATABASE > MsSQL' 카테고리의 다른 글
[MsSQL] 백업 파일 관리 - 최근 전체 백업과 하위 로그 백업 확인하기 (2) | 2024.11.14 |
---|---|
[MsSQL] 마지막 페이지 Latch 경합 (Insert 지연 튜닝) - 2. 테스트 및 적용 (0) | 2024.11.13 |
[MsSQL] 현재 세션에 대한 정보들 조회하기 (0) | 2024.11.10 |
[MsSQL] 마지막 페이지 Latch 경합 (Insert 지연 튜닝) - 1. 원인 찾기 (1) | 2024.11.08 |
[MsSQL] DBCC WRITEPAGE를 활용한 Data Page 오류 만들기 및 테스트 (2) | 2024.10.07 |
[MsSQL] SQL Server - Log Shipping 을 활용한 이중화 (DR 구성) (0) | 2024.07.22 |
[MsSQL] Table, Index가 속한 File Group 조회 (1) | 2024.07.03 |
[MsSQL] Openquery update - 다른 데이터베이스의 데이터 변경하기 (0) | 2024.06.28 |