다음을 통해 공유


sys.dm_exec_cached_plans(Transact-SQL)

SQL Server에서 빠른 쿼리 실행을 위해 캐시하는 각 쿼리 계획에 대한 행을 반환합니다. 이 동적 관리 뷰를 사용하여 캐시된 쿼리 계획, 캐시된 쿼리 텍스트, 캐시된 계획이 사용한 메모리 양, 캐시된 계획의 재사용 횟수를 찾을 수 있습니다.

[!참고]

쿼리 계획의 경우 sys.dm_exec_cached_plans 동적 관리 뷰는 SQL Server 2000의 syscacheobjects 시스템 테이블에 매핑됩니다.

열 이름

데이터 형식

설명

bucketid

int

항목이 캐시된 해시 버킷의 ID입니다. 값은 0에서 캐시 유형별 해시 테이블 크기까지의 범위를 나타냅니다.

SQL Plans 및 Object Plans 캐시의 경우 해시 테이블 크기는 32비트 시스템에서 최대 10007까지, 64비트 시스템에서 최대 40009까지 가능합니다. Bound Trees 캐시의 경우 해시 테이블 크기는 32비트 시스템에서 최대 1009까지, 64비트 시스템에서 최대 4001까지 가능합니다. Extended Stored Procedures 캐시의 경우 해시 테이블 크기는 32비트 및 64비트 시스템에서 최대 127까지 가능합니다. 캐시 유형 및 해시 테이블에 대한 자세한 내용은 sys.dm_os_memory_cache_hash_tables(Transact-SQL)을 참조하십시오.

refcounts

int

이 캐시 개체를 참조하는 캐시 개체의 수입니다. 항목이 캐시에 있으려면 Refcounts가 1 이상이어야 합니다.

usecounts

int

캐시 개체가 조회된 횟수입니다. 매개 변수가 있는 쿼리가 캐시에서 계획을 찾은 경우 증가하지 않습니다. 실행 계획을 사용하는 경우 여러 번 증가할 수 있습니다.

size_in_bytes

int

캐시 개체가 사용한 바이트 수입니다.

memory_object_address

varbinary(8)

캐시된 항목의 메모리 주소입니다. 이 값은 sys.dm_os_memory_objects와 함께 사용하여 캐시된 계획의 메모리 분석을 가져올 수 있으며 sys.dm_os_memory_cache_entries와 함께 사용하여 항목 캐시 비용을 구할 수 있습니다.

cacheobjtype

nvarchar(34)

캐시에 있는 개체의 유형입니다. 이 값은 다음 중 하나일 수 있습니다.

  • Compiled Plan

  • Compiled Plan Stub

  • Parse Tree

  • Extended Proc

  • CLR Compiled Func

  • CLR Compiled Proc

objtype

nvarchar(16)

개체의 유형입니다. 이 값은 다음 중 하나일 수 있습니다.

값설명
Proc저장 프로시저
Prepared준비된 문
Adhoc임시 쿼리1
ReplProc복제 필터 프로시저
Trigger트리거
View뷰
Default기본값
UsrTab사용자 테이블
SysTab시스템 테이블
CheckCHECK 제약 조건
Rule규칙

plan_handle

varbinary(64)

메모리 내 계획의 식별자입니다. 이 식별자는 일시적이며 계획이 캐시에 있는 동안에만 일정하게 유지됩니다. 이 값은 다음 동적 관리 함수와 함께 사용할 수 있습니다.

sys.dm_exec_sql_text

sys.dm_exec_query_plan

sys.dm_exec_plan_attributes

pool_id

int

이 계획 메모리 사용량이 계산된 리소스 풀의 ID입니다.

1  원격 프로시저 호출 대신 osql 또는 sqlcmd를 사용하여 언어 이벤트로 제출된 Transact-SQL을 가리킵니다.

사용 권한

서버에 대한 VIEW SERVER STATE 사용 권한이 필요합니다.

1. 다시 사용된 캐시된 항목의 일괄 처리 텍스트 반환

다음 예에서는 두 번 이상 사용되었던 모든 캐시된 항목의 SQL 텍스트를 반환합니다.

SELECT usecounts, cacheobjtype, objtype, text 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE usecounts > 1 
ORDER BY usecounts DESC;
GO

2. 모든 캐시된 트리거에 대한 쿼리 계획 반환

다음 예에서는 모든 캐시된 트리거의 쿼리 계획을 반환합니다.

SELECT plan_handle, query_plan, objtype 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
WHERE objtype ='Trigger';
GO

3. 계획 컴파일 시 사용된 SET 옵션의 반환

다음 예에서는 계획 컴파일 시 사용된 SET 옵션을 반환합니다. 계획에 대한 sql_handle도 반환됩니다. PIVOT 연산자는 set_options 및 sql_handle 특성을 행이 아닌 열로 출력하는 데 사용됩니다. set_options에서 반환된 값에 대한 자세한 내용은 sys.dm_exec_plan_attributes(Transact-SQL)를 참조하십시오.

SELECT plan_handle, pvt.set_options, pvt.sql_handle
FROM (
      SELECT plan_handle, epa.attribute, epa.value 
      FROM sys.dm_exec_cached_plans 
      OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
      WHERE cacheobjtype = 'Compiled Plan'
      ) AS ecpa 
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;
GO

4. 모든 캐시된 컴파일 계획의 메모리 분석 반환

다음 예에서는 캐시에서 모든 컴파일된 계획에 사용되는 메모리 분석을 반환합니다.

SELECT plan_handle, ecp.memory_object_address AS CompiledPlan_MemoryObject, 
    omo.memory_object_address, pages_allocated_count, type, page_size_in_bytes 
FROM sys.dm_exec_cached_plans AS ecp 
JOIN sys.dm_os_memory_objects AS omo 
    ON ecp.memory_object_address = omo.memory_object_address 
    OR ecp.memory_object_address = omo.parent_address
WHERE cacheobjtype = 'Compiled Plan';
GO