Поделиться через


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Применимо к: SQL Server 2019 (15.x) и более поздних версий базы данных SQLAzure Для Управляемого экземпляраSQL Azure в Microsoft Fabric

Возвращает сведения о запросах, необходимых для отсутствующих индексов из групп отсутствующих индексов, за исключением пространственных индексов. На каждой отсутствующей индексной группе может быть возвращено более одного запроса. Одна отсутствующая индексная группа может содержать несколько запросов, требующих одного и того же индекса.

В Azure SQL Database динамические представления управления не могут раскрывать информацию, которая может повлиять на содержание базы данных, или информацию о других базах данных, к которым пользователь имеет доступ. Чтобы избежать предоставления этой информации, отфильтровывается каждая строка, содержащая данные, которые не принадлежат подключену клиенту.

Имя столбца Тип данных Description
group_handle int Идентифицирует группу отсутствующих индексов. Этот идентификатор уникален в пределах сервера.

Другие столбцы содержат сведения обо всех запросах, для которых индекс в группе считается отсутствующим.

Группа индексов содержит только один индекс.

Можно присоединиться к index_group_handlesys.dm_db_missing_index_groups.
query_hash binary(8) Двоичное хэш-значение рассчитывается для запроса и используется для идентификации запросов с аналогичной логикой. Можно использовать хэш запроса для определения использования статистических ресурсов для запросов, которые отличаются только своими литеральными значениями.
query_plan_hash binary(8) Двоичное хэш-значение рассчитывается для плана выполнения запроса и используется для идентификации аналогичных планов выполнения запросов. Можно использовать хэш плана запроса для нахождения совокупной стоимости запросов со схожими планами выполнения.

Всегда 0x000 , когда нативно скомпилированная сохранённая процедура запрашивает оптимизированную для памяти таблицу.
last_sql_handle varbinary(64) Токен, который уникально идентифицирует пакетную или хранящуюся процедуру последнего скомпилированного оператора, которому требовался этот индекс.

Его last_sql_handle можно использовать для получения текста SQL запроса, вызвав динамическую функцию управления sys.dm_exec_sql_text.
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 , если Query Store не был включён при компиляции запроса.
user_seeks bigint Количество операций поиска по запросам пользователя, для которых мог бы использоваться рекомендованный индекс в группе.
user_scans bigint Количество операций просмотра по запросам пользователя, для которых мог бы использоваться рекомендованный индекс в группе.
last_user_seek datetime Дата и время последней операции поиска по запросам пользователя, для которых мог бы использоваться рекомендованный индекс в группе.
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. Также можно сохранить отсутствующие индексы с помощью хранилище запросов.

Разрешения

Для запроса на этот динамический вид управления пользователям необходимо предоставить VIEW SERVER STATE разрешение или любое разрешение, подразумевающее это VIEW SERVER STATE разрешение, для SQL Server 2019 (15.x) и предыдущих версий.

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере для SQL Server 2022 (16.x) и более поздних версий.

Примеры

В следующих примерах показано, как использовать динамическое sys.dm_db_missing_index_group_stats_query представление управления.

А. Поиск последнего текста запроса для лучших 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;