sys.dm_exec_query_optimizer_info(Transact-SQL)
SQL Server 쿼리 최적화 프로그램의 작업에 대한 자세한 통계를 반환합니다. 쿼리 최적화 문제 또는 개선점을 식별하는 작업을 튜닝할 때 이 뷰를 사용할 수 있습니다. 예를 들어 총 최적화 수, 경과된 시간 값 및 최종 비용 값을 사용하여 현재 작업의 쿼리 최적화와 튜닝 프로세스 동안 관찰된 모든 변경 내용을 비교할 수 있습니다. 일부 카운터에서는 SQL Server 내부 진단용으로만 사용되는 데이터를 제공합니다. 이러한 카운터는 "내부 전용"으로 표시됩니다.
이름 |
데이터 형식 |
설명 |
---|---|---|
counter |
nvarchar(8000) |
최적화 프로그램 통계 이벤트의 이름입니다. |
occurrence |
bigint |
이 카운터에 대한 최적화 이벤트의 발생 횟수입니다. |
value |
float |
이벤트 발생당 평균 속성 값입니다. |
사용 권한
서버에 대한 VIEW SERVER STATE 권한이 필요합니다.
주의
sys.dm_exec_query_optimizer_info에는 다음 속성(counter)이 포함됩니다. 모든 occurrence 값은 누적 값이며 시스템을 다시 시작할 때 0으로 설정됩니다. value 필드의 모든 값은 시스템을 다시 시작할 때 NULL로 설정됩니다. 평균을 지정하는 모든 값 열의 값은 평균 계산의 분모와 같은 행에서 얻은 occurrence 값을 사용합니다. 모든 쿼리 최적화는 SQL Server에서 사용자 생성 쿼리와 시스템 생성 쿼리를 포함하여 dm_exec_query_optimizer_info의 변경 내용을 결정할 때 측정됩니다. 이미 캐시된 계획을 실행하면 dm_exec_query_optimizer_info의 값이 변경되지 않고 최적화만 의미가 있습니다.
counter |
occurrence |
value |
---|---|---|
optimizations |
총 최적화 수입니다. |
해당 사항 없음 |
elapsed time |
총 최적화 수입니다. |
개별 문(쿼리)의 최적화당 평균 경과 시간(초)입니다. |
final cost |
총 최적화 수입니다. |
최적화된 계획의 평균 예상 비용(내부 비용 단위)입니다. |
trivial plan |
내부 전용 |
내부 전용 |
tasks |
내부 전용 |
내부 전용 |
no plan |
내부 전용 |
내부 전용 |
search 0 |
내부 전용 |
내부 전용 |
search 0 time |
내부 전용 |
내부 전용 |
search 0 tasks |
내부 전용 |
내부 전용 |
search 1 |
내부 전용 |
내부 전용 |
search 1 time |
내부 전용 |
내부 전용 |
search 1 tasks |
내부 전용 |
내부 전용 |
search 2 |
내부 전용 |
내부 전용 |
search 2 time |
내부 전용 |
내부 전용 |
search 2 tasks |
내부 전용 |
내부 전용 |
gain stage 0 to stage 1 |
내부 전용 |
내부 전용 |
gain stage 1 to stage 2 |
내부 전용 |
내부 전용 |
timeout |
내부 전용 |
내부 전용 |
memory limit exceeded |
내부 전용 |
내부 전용 |
insert stmt |
INSERT 문에 대한 최적화 수입니다. |
해당 사항 없음 |
delete stmt |
DELETE 문에 대한 최적화 수입니다. |
해당 사항 없음 |
update stmt |
UPDATE 문에 대한 최적화 수입니다. |
해당 사항 없음 |
contains subquery |
하나 이상의 하위 쿼리를 포함하는 쿼리에 대한 최적화 수입니다. |
해당 사항 없음 |
unnest failed |
내부 전용 |
내부 전용 |
tables |
총 최적화 수입니다. |
최적화된 쿼리당 참조된 평균 테이블 수입니다. |
hints |
일부 힌트가 지정된 횟수입니다. 횟수로 계산되는 힌트에는 JOIN, GROUP, UNION 및 FORCE ORDER 쿼리 힌트, FORCE PLAN 집합 옵션, 조인 힌트가 있습니다. |
해당 사항 없음 |
order hint |
FORCE ORDER 힌트가 지정된 횟수입니다. |
해당 사항 없음 |
join hint |
조인 힌트를 통해 조인 알고리즘이 강제 적용된 횟수입니다. |
해당 사항 없음 |
view reference |
쿼리에서 뷰가 참조된 횟수입니다. |
해당 사항 없음 |
remote query |
쿼리에서 네 부분으로 된 이름이나 OPENROWSET 결과가 있는 테이블 등의 원격 데이터 원본을 하나 이상 참조한 최적화 수입니다. |
해당 사항 없음 |
maximum DOP |
총 최적화 수입니다. |
최적화된 계획에 대한 평균 유효 MAXDOP 값입니다. 기본적으로 유효 MAXDOP는 max degree of parallelism 서버 구성 옵션에 의해 결정되며 MAXDOP 쿼리 힌트 값으로 특정 쿼리에 대해 재정의할 수 있습니다. |
maximum recursion level |
0보다 큰 MAXRECURSION 수준이 쿼리 힌트와 함께 지정된 최적화 수입니다. |
최대 재귀 수준이 쿼리 힌트와 함께 지정되는 최적화의 평균 MAXRECURSION 수준입니다. |
indexed views loaded |
내부 전용 |
내부 전용 |
indexed views matched |
하나 이상의 인덱싱된 뷰가 일치된 최적화 수입니다. |
일치된 평균 뷰 수입니다. |
indexed views used |
일치된 후 하나 이상의 인덱싱된 뷰가 출력 계획에 사용되는 최적화 수입니다. |
사용된 평균 뷰 수입니다. |
indexed views updated |
하나 이상의 인덱싱된 뷰를 유지 관리하는 계획을 생성하는 DML 문의 최적화 수입니다. |
유지 관리된 평균 뷰 수입니다. |
dynamic cursor request |
동적 커서 요청이 지정된 최적화 수입니다. |
해당 사항 없음 |
fast forward cursor request |
빠른 전진 커서 요청이 지정된 최적화 수입니다. |
해당 사항 없음 |
merge stmt |
MERGE 문에 대한 최적화 수입니다. |
해당 사항 없음 |
예
1. 최적화 프로그램 실행 통계 보기
이 SQL Server 인스턴스에 대한 현재 최적화 프로그램 실행 통계를 확인할 수 있습니다.
SELECT * FROM sys.dm_exec_query_optimizer_info;
2. 총 최적화 수 보기
최적화 수행 횟수를 알 수 있습니다.
SELECT occurrence AS Optimizations FROM sys.dm_exec_query_optimizer_info
WHERE counter = 'optimizations';
3. 최적화당 평균 경과 시간
최적화당 평균 경과 시간을 알 수 있습니다.
SELECT ISNULL(value,0.0) AS ElapsedTimePerOptimization
FROM sys.dm_exec_query_optimizer_info WHERE counter = 'elapsed time';
4. 하위 쿼리를 포함하는 최적화 부분
하위 쿼리를 포함하는 최적화 쿼리 부분을 확인할 수 있습니다.
SELECT (SELECT CAST (occurrence AS float) FROM sys.dm_exec_query_optimizer_info WHERE counter = 'contains subquery') /
(SELECT CAST (occurrence AS float)
FROM sys.dm_exec_query_optimizer_info WHERE counter = 'optimizations')
AS ContainsSubqueryFraction;