sys.dm_exec_plan_attributes(Transact-SQL)
계획 핸들로 지정한 계획의 각 계획 특성에 대해 행을 하나씩 반환합니다. 이 테이블 반환 함수를 사용하여 계획의 현재 동시 실행 수 또는 캐시 키 값과 같은 특정 계획에 대한 정보를 가져올 수 있습니다.
참고
이 함수를 통해 반환된 일부 정보는 sys.syscacheobjects 이전 버전과의 호환성 뷰에 매핑됩니다.
적용 대상: SQL Server(SQL Server 2008 - 현재 버전). |
구문
sys.dm_exec_plan_attributes ( plan_handle )
인수
- plan_handle
실행된 일괄 처리에 대한 쿼리 계획을 고유하게 식별하며 해당 계획은 계획 캐시에 있습니다. plan_handle은 varbinary(64)입니다. 계획 핸들은 sys.dm_exec_cached_plans 동적 관리 뷰에서 얻을 수 있습니다.
반환된 테이블
열 이름 |
데이터 형식 |
설명 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
attribute |
varchar(128) |
이 계획과 연결된 특성의 이름입니다. 다음 중 하나일 수 있습니다.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value |
sql_variant |
이 계획과 연결된 특성의 값입니다. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_cache_key |
bit |
특성이 계획에 대한 캐시 조회 키의 일부로 사용되는지 여부를 나타냅니다. |
사용 권한
서버에 대한 VIEW SERVER STATE 권한이 필요합니다.
주의
SET 옵션
동일하게 컴파일된 계획의 복사본에서 set_options 열의 값만 서로 다를 수 있습니다. 이는 동일한 쿼리에 대해 서로 다른 연결이 서로 다른 SET 옵션 집합을 사용하고 있음을 나타냅니다. 캐시에 있는 계획의 여러 복사본으로 인해 추가 컴파일 작업이 발생하고 계획 재사용 횟수가 줄어들며 계획 캐시 인플레이션이 발생할 수 있으므로 일반적으로 서로 다른 옵션 집합은 사용하지 않는 것이 좋습니다.
SET 옵션 평가
set_options에 반환된 값을 계획 컴파일 시 사용한 옵션으로 변환하려면 set_options 값에서 가장 큰 가능한 값부터 0이 될 때까지 뺍니다. 뺀 각 값은 쿼리 계획에 사용된 옵션에 해당합니다. 예를 들어 set_options의 값이 251인 경우 계획 컴파일 시 사용한 옵션은 ANSI_NULL_DFLT_ON(128), QUOTED_IDENTIFIER(64), ANSI_NULLS(32), ANSI_WARNINGS(16), CONCAT_NULL_YIELDS_NULL(8), Parallel Plan(2) 및 ANSI_PADDING(1)입니다.
옵션 |
값 |
---|---|
ANSI_PADDING |
1 |
Parallel Plan |
2 |
FORCEPLAN |
4 |
CONCAT_NULL_YIELDS_NULL |
8 |
ANSI_WARNINGS |
16 |
ANSI_NULLS |
32 |
QUOTED_IDENTIFIER |
64 |
ANSI_NULL_DFLT_ON |
128 |
ANSI_NULL_DFLT_OFF |
256 |
NoBrowseTable 계획이 FOR BROWSE 작업을 구현하는 데 작업 테이블을 사용하지 않음을 나타냅니다. |
512 |
TriggerOneRow 계획에 AFTER 트리거 델타 테이블에 대한 단일 행 최적화가 포함됨을 나타냅니다. |
1024 |
ResyncQuery 쿼리가 내부 시스템 저장 프로시저에서 제출됨을 나타냅니다. |
2048 |
ARITH_ABORT |
4096 |
NUMERIC_ROUNDABORT |
8192 |
DATEFIRST |
16384 |
DATEFORMAT |
32768 |
LanguageID |
65536 |
UPON 계획을 컴파일할 때 데이터베이스 옵션 PARAMETERIZATION이 FORCED로 설정됨을 나타냅니다. |
131072 |
ROWCOUNT |
적용 대상: SQL Server 2012 - SQL Server 2014 262144 |
커서
비활성 커서가 컴파일된 계획에서 캐시되어 커서의 동시 사용자가 커서 저장에 사용된 메모리를 다시 사용할 수 있습니다. 예를 들어 일괄 처리가 커서를 할당 취소하지 않고 선언 및 사용한다고 가정합니다. 두 사용자가 동일한 일괄 처리를 실행하는 경우에는 두 활성 커서가 있습니다. 커서가 다른 일괄 처리에서 잠재적으로 할당 취소되면 커서 저장에 사용된 메모리가 캐시되고 해제되지 않습니다. 이 비활성 커서 목록은 컴파일된 계획에서 유지됩니다. 이후에 사용자가 일괄 처리를 실행하면 캐시된 커서 메모리가 다시 사용되고 활성 커서로 적절히 초기화됩니다.
커서 옵션 평가
required_cursor_options 및 acceptable_cursor_options에 반환된 값을 계획 컴파일 시 사용한 옵션으로 변환하려면 해당 열 값에서 가장 큰 가능한 값부터 0이 될 때까지 뺍니다. 뺀 각 값은 쿼리 계획에 사용된 커서 옵션에 해당합니다.
옵션 |
값 |
---|---|
없음 |
0 |
INSENSITIVE |
1 |
SCROLL |
2 |
READ ONLY |
4 |
FOR UPDATE |
8 |
LOCAL |
16 |
GLOBAL |
32 |
FORWARD_ONLY |
64 |
KEYSET |
128 |
DYNAMIC |
256 |
SCROLL_LOCKS |
512 |
OPTIMISTIC |
1024 |
STATIC |
2048 |
FAST_FORWARD |
4096 |
IN PLACE |
8192 |
FOR select_statement |
16384 |
예
1.특정 계획에 대한 특성 반환
다음 예에서는 지정된 계획에 대한 모든 계획 특성을 반환합니다. 지정된 계획에 대한 계획 핸들을 얻기 위해 먼저 sys.dm_exec_cached_plans 동적 관리 뷰가 쿼리됩니다. 두 번째 쿼리에서는 <plan_handle>을 첫 번째 쿼리의 계획 핸들 값으로 대체합니다.
SELECT plan_handle, refcounts, usecounts, size_in_bytes, cacheobjtype, objtype
FROM sys.dm_exec_cached_plans;
GO
SELECT attribute, value, is_cache_key
FROM sys.dm_exec_plan_attributes(<plan_handle>);
GO
2.컴파일된 계획의 SET 옵션 및 캐시된 계획의 SQL 핸들 반환
다음 예에서는 각 계획이 컴파일될 때 사용한 옵션을 나타내는 값을 반환합니다. 또한 모든 캐시된 계획의 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
참고 항목
참조
실행 관련 동적 관리 뷰 및 함수(Transact-SQL)