플랜캐시 & 실행계획
SQL Server는 한번 실행된 쿼리는 처음 만들어진 실행계획을 플랜캐시에 등록하여 이후에 재사용합니다.
특정 조건을 만족하여 쿼리의 실행계획이 재 컴파일 되기 전까지는 말이죠.
실행계획이 재 컴파일 되어 새로운 실행계획이 만들어지는경우 기존의 실행계획은 삭제되어 확인할 수 없습니다.
그럼 현재 플랜캐시에 있는 실행계획을 확인해 보도록 하겠습니다.
플랜캐시에서는 아래와 같은 정보를 확인할 수 있습니다.
- 쿼리 구문
- 수행 횟수
- CPU 시간
- 수행 시간
- 논리적 읽기
- 논리적 쓰기
- 쿼리 플랜
현재 플랜캐시에 있는 실행계획을 확인하는 쿼리
21, 22 라인의 조건을 기호에 맞게 수정하여 특정 데이터베이스에서 특정 시간에 생성된 실행 계획을 확인할 수 있습니다.
주석처리를 하여 전체 실행계획을 출력할 수도 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | SELECT databases.name, dm_exec_query_stats.sql_handle, dm_exec_query_stats.plan_handle, dm_exec_sql_text.text AS TSQL_Text, dm_exec_query_stats.creation_time, dm_exec_query_stats.last_execution_time, dm_exec_query_stats.execution_count, dm_exec_query_stats.total_worker_time AS total_cpu_time, dm_exec_query_stats.total_elapsed_time, dm_exec_query_stats.total_logical_reads, dm_exec_query_stats.last_logical_reads, dm_exec_query_stats.total_logical_writes, dm_exec_query_stats.last_logical_writes, dm_exec_query_plan.query_plan FROM sys.dm_exec_query_stats WITH(NOLOCK) CROSS APPLY sys.dm_exec_sql_text(dm_exec_query_stats.plan_handle) CROSS APPLY sys.dm_exec_query_plan(dm_exec_query_stats.plan_handle) INNER JOIN sys.databases WITH(NOLOCK) ON dm_exec_sql_text.dbid = databases.database_id AND databases.name = 'AdventureWorks' AND dm_exec_query_stats.sql_handle IN ( SELECT dm_exec_query_stats.sql_handle FROM sys.dm_exec_query_stats WITH(NOLOCK) WHERE dm_exec_query_stats.creation_time >= '2020-01-13 12:34:45' AND dm_exec_query_stats.creation_time <= '2020-01-13 12:34:46') ORDER BY dm_exec_query_stats.sql_handle, dm_exec_query_stats.creation_time OPTION (MAXDOP 1) | cs |
'SQL Server > SQL Server 자주보는' 카테고리의 다른 글
[MSSQL] SP 마지막으로 실행한 시간 확인하기 (0) | 2020.02.10 |
---|---|
[MSSQL] 파티션 테이블, 파티션 파일그룹, 파티션 경계값 확인하는 방법 (0) | 2020.02.09 |
[MSSQL] SP 가 병렬처리되는지 확인하는 방법 (0) | 2020.02.09 |
[MSSQL] TempDB 를 사용하는 쿼리 찾기 (0) | 2020.02.09 |
[MSSQL] 테이블 컬럼조회하기 (오라클의 DESC) (0) | 2019.03.28 |