Share via


sys.dm_db_missing_index_group_stats_query(Transact-SQL)

적용 대상: SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed Instance

공간 인덱스를 제외한 누락된 인덱스 그룹에서 누락된 인덱스가 필요한 쿼리에 대한 정보를 반환합니다. 누락된 인덱스 그룹당 둘 이상의 쿼리가 반환될 수 있습니다. 누락된 인덱스 그룹 중 하나에 동일한 인덱스가 필요한 여러 쿼리가 있을 수 있습니다.

Azure SQL Database에서 동적 관리 뷰는 데이터베이스 포함에 영향을 주거나 사용자가 액세스할 수 있는 다른 데이터베이스에 대한 정보를 노출하는 정보를 노출할 수 없습니다. 이 정보를 노출하지 않으려면 연결된 테넌트에 속하지 않는 데이터가 포함된 모든 행이 필터링됩니다.

열 이름 데이터 형식 설명
group_handle int 누락된 인덱스 그룹을 식별합니다. 이 식별자는 서버 전체에서 고유합니다.

다른 열은 그룹의 인덱스가 누락된 것으로 간주되는 모든 쿼리에 대한 정보를 제공합니다.

인덱스 그룹에는 하나의 인덱스만 포함됩니다.

sys.dm_db_missing_index_groups 조인index_group_handle 수 있습니다.
query_hash binary(8) 쿼리에서 계산되고 유사한 논리를 사용하여 쿼리를 식별하는 데 사용되는 이진 해시 값입니다. 쿼리 해시를 사용하여 리터럴 값만 다른 쿼리의 집계 리소스 사용량을 확인할 수 있습니다.
query_plan_hash binary(8) 쿼리 실행 계획에서 계산되고 유사한 쿼리 실행 계획을 식별하는 데 사용되는 이진 해시 값입니다. 쿼리 계획 해시를 사용하여 비슷한 실행 계획이 있는 쿼리의 누적 비용을 찾을 수 있습니다.

고유하게 컴파일된 저장 프로시저가 메모리 최적화 테이블을 쿼리할 때 항상 0x000.
last_sql_handle varbinary(64) 이 인덱스가 필요한 마지막 컴파일된 문의 일괄 처리 또는 저장 프로시저를 고유하게 식별하는 토큰입니다.

동적 last_sql_handle 관리 함수 sys.dm_exec_sql_text 호출하여 쿼리의 SQL 텍스트를 검색하는 데 사용할 수 있습니다.
last_statement_start_offset int 0부터 시작하여 SQL 일괄 처리에서 이 인덱스가 필요한 마지막 컴파일된 문에 대해 행이 일괄 처리 또는 지속형 개체의 텍스트 내에서 설명하는 쿼리의 시작 위치를 바이트 단위로 나타냅니다.
last_statement_end_offset int 0부터 시작하여 SQL 일괄 처리에서 이 인덱스가 필요한 마지막 컴파일된 문에 대한 일괄 처리 또는 지속형 개체의 텍스트 내에서 행이 설명하는 쿼리의 끝 위치를 바이트 단위로 나타냅니다.
last_statement_sql_handle varbinary(64) 이 인덱스가 필요한 마지막 컴파일된 문의 일괄 처리 또는 저장 프로시저를 고유하게 식별하는 토큰입니다. 쿼리 저장소에서 사용됩니다. 달리 last_sql_handle쿼리 sys.query_store_query_text 저장소 카탈로그 뷰에서 사용하는 참조 statement_sql_handle 는 sys.query_store_query_text.

쿼리가 컴파일될 때 쿼리 저장소를 사용하도록 설정하지 않은 경우 0을 반환합니다.
user_seeks bigint 그룹의 권장 인덱스를 사용할 수 있는 사용자 쿼리로 인한 검색 횟수입니다.
user_scans bigint 그룹의 권장 인덱스를 사용할 수 있는 사용자 쿼리로 인한 검사 수입니다.
last_user_seek datetime 그룹의 권장 인덱스가 사용되었을 수 있는 사용자 쿼리에 의해 수행된 마지막 검색(Seek)의 날짜와 시간입니다.
last_user_scan datetime 그룹의 권장 인덱스를 사용할 수 있었던 사용자 쿼리로 인한 마지막 검사 날짜 및 시간입니다.
avg_total_user_cost float 그룹의 인덱스로 줄일 수 있는 사용자 쿼리의 평균 비용입니다.
avg_user_impact float 누락된 인덱스 그룹을 구현할 경우 사용자 쿼리에서 얻을 수 있는 적합한 평균 백분율입니다. 즉, 이 누락된 인덱스 그룹을 구현할 경우 쿼리 비용이 평균적으로 이 백분율만큼 감소합니다.
system_seeks bigint 그룹의 권장 인덱스를 사용할 수 있는 자동 통계 쿼리와 같은 시스템 쿼리로 인한 검색 횟수입니다. 자세한 내용은 Auto Stats 이벤트 클래스를 참조 하세요.
system_scans bigint 그룹의 권장 인덱스를 사용할 수 있는 시스템 쿼리로 인한 검사 수입니다.
last_system_seek datetime 그룹의 권장 인덱스를 사용할 수 있었던 시스템 쿼리로 인한 마지막 시스템 검색 날짜 및 시간입니다.
last_system_scan datetime 그룹의 권장 인덱스를 사용할 수 있었던 시스템 쿼리로 인한 마지막 시스템 검사 날짜 및 시간입니다.
avg_total_system_cost float 그룹의 인덱스로 줄일 수 있는 시스템 쿼리의 평균 비용입니다.
avg_system_impact float 누락된 인덱스 그룹이 구현된 경우 시스템 쿼리에서 경험할 수 있는 평균 백분율 이점입니다. 즉, 이 누락된 인덱스 그룹을 구현할 경우 쿼리 비용이 평균적으로 이 백분율만큼 감소합니다.

설명

반환된 sys.dm_db_missing_index_group_stats_query 정보는 모든 쿼리 컴파일 또는 다시 컴파일이 아니라 모든 쿼리 실행에 의해 업데이트됩니다. 사용 통계는 유지되지 않으며 데이터베이스 엔진이 다시 시작될 때까지만 유지됩니다.

데이터베이스 관리자는 서버 재활용 후 사용 통계를 유지하려는 경우 누락된 인덱스 정보의 백업 복사본을 주기적으로 만들어야 합니다. sqlserver_start_time sys.dm_os_sys_info 열을 사용하여 마지막 데이터베이스 엔진 시작 시간을 찾습니다. 쿼리 저장소를 사용하여 누락된 인덱스를 유지할 수도 있습니다.

참고 항목

이 DMV에 대한 결과 집합은 600개 행으로 제한됩니다. 각 행에는 누락된 인덱스가 하나 있습니다. 누락된 인덱스가 600개 이상인 경우 누락된 기존 인덱스를 처리해야 최신 인덱스를 볼 수 있습니다.

사용 권한

이 동적 관리 뷰를 쿼리하려면 사용자에게 VIEW SERVER STATE 사용 권한 또는 VIEW SERVER STATE 권한을 의미하는 모든 권한이 부여되어야 합니다.

SQL Server 2022 이상에 대한 권한

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

다음 예제에서는 동적 관리 뷰를 sys.dm_db_missing_index_group_stats_query 사용하는 방법을 보여 줍니다.

A. 사용자 쿼리에 대해 예상되는 상위 10개 개선 사항에 대한 최신 쿼리 텍스트 찾기

다음 쿼리는 가장 높은 예상 누적 개선을 내림차순으로 생성하는 누락된 인덱스 10개에 대해 마지막으로 기록된 쿼리 텍스트를 반환합니다.

SELECT TOP 10 
    SUBSTRING
    (
            sql_text.text,
            misq.last_statement_start_offset / 2 + 1,
            (
            CASE misq.last_statement_start_offset
                WHEN -1 THEN DATALENGTH(sql_text.text)
                ELSE misq.last_statement_end_offset
            END - misq.last_statement_start_offset
            ) / 2 + 1
    ),
    misq.*
FROM sys.dm_db_missing_index_group_stats_query AS misq
CROSS APPLY sys.dm_exec_sql_text(misq.last_sql_handle) AS sql_text
ORDER BY misq.avg_total_user_cost * misq.avg_user_impact * (misq.user_seeks + misq.user_scans) DESC; 

다음 단계

다음 문서에서 누락된 인덱스 기능 및 관련 개념에 대해 자세히 알아봅니다.