sys.dm_db_missing_index_group_stats_query (Transact-SQL)
Область применения: SQL Server 2019 (15.x) База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает сведения о запросах, необходимых для отсутствующих индексов из групп отсутствующих индексов, за исключением пространственных индексов. Несколько запросов могут быть возвращены для каждой отсутствуюющей группы индексов. Одна из отсутствующих групп индексов может иметь несколько запросов, необходимых для одного и того же индекса.
В База данных SQL Azure динамические административные представления не могут предоставлять сведения, влияющие на доступность базы данных или предоставление сведений о других базах данных, к которым пользователь имеет доступ. Чтобы избежать предоставления этой информации, отфильтровывается каждая строка, содержащая данные, которые не принадлежат подключену клиенту.
Имя столбца | Тип данных | Description |
---|---|---|
group_handle | int | Идентифицирует группу отсутствующих индексов. Этот идентификатор уникален в пределах сервера. Другие столбцы содержат сведения обо всех запросах, для которых индекс в группе считается отсутствующим. Группа индексов содержит только один индекс. Можно присоединиться к index_group_handle sys.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. |
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. Также можно сохранить отсутствующие индексы с помощью хранилище запросов.
Примечание.
Результирующий набор для этого динамического административного представления ограничен 600 строками. Каждая строка содержит один отсутствующий индекс. Если у вас более 600 отсутствующих индексов, следует устранить существующие отсутствующие индексы, чтобы просмотреть новые.
Разрешения
Для выполнения запроса к этому динамическому административному представлению пользователям должно быть предоставлено разрешение VIEW SERVER STATE или любое другое, подразумевающее разрешение VIEW SERVER STATE.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.
Примеры
В следующих примерах показано, как использовать динамическое 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;
Следующие шаги
Дополнительные сведения о отсутствующих функциях индекса и связанных понятиях см. в следующих статьях:
- Настройка некластеризованных индексов с предложениями отсутствующих индексов
- sys.dm_db_missing_index_columns (Transact-SQL)
- sys.dm_db_missing_index_details (Transact-SQL)
- sys.dm_db_missing_index_groups (Transact-SQL)
- sys.dm_db_missing_index_group_stats (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- Инструкция CREATE INDEX (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- Хранилище запросов