Partilhar via


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Devolve informação sobre consultas que necessitavam de um índice em falta de grupos de índices em falta, excluindo índices espaciais. Mais do que uma consulta pode ser devolvida por cada grupo de índice em falta. Um grupo de índice em falta pode ter várias consultas que precisavam do mesmo índice.

No Azure SQL Database, as vistas de gestão dinâmica não podem expor informações que afetariam a contenção da base de dados, nem informações sobre outras bases de dados a que o utilizador tenha acesso. Para evitar a exposição dessas informações, todas as linhas que contêm dados que não pertencem ao locatário conectado são filtradas.

Nome da coluna Tipo de dados Description
group_handle int Identifica um grupo de índices em falta. Este identificador é único em todo o servidor.

As outras colunas fornecem informações sobre todas as consultas para as quais o índice do grupo é considerado ausente.

Um grupo de índices contém apenas um índice.

Pode ser ligado index_group_handle em sys.dm_db_missing_index_groups.
query_hash binário(8) Valor de hash binário calculado na consulta e usado para identificar consultas com lógica semelhante. Você pode usar o hash de consulta para determinar o uso de recursos agregados para consultas que diferem apenas por valores literais.
query_plan_hash binário(8) Valor de hash binário calculado no plano de execução da consulta e usado para identificar planos de execução de consulta semelhantes. Você pode usar o hash do plano de consulta para localizar o custo cumulativo de consultas com planos de execução semelhantes.

Sempre 0x000 que um procedimento armazenado compilado nativamente consulta uma tabela otimizada para memória.
last_sql_handle varbinary(64) Um token que identifica de forma única o procedimento em lote ou armazenado da última instrução compilada que necessitava deste índice.

Pode last_sql_handle ser usado para recuperar o texto SQL da consulta chamando a função de gestão dinâmica sys.dm_exec_sql_text.
last_statement_start_offset int Indica, em bytes, começando por 0, a posição inicial da consulta que a linha descreve dentro do texto do seu lote ou objeto persistido para a última instrução compilada que necessitava deste índice no seu lote SQL.
last_statement_end_offset int Indica, em bytes, começando por 0, a posição final da consulta que a linha descreve dentro do texto do seu lote ou objeto persistente, para a última instrução compilada que precisava deste índice no seu lote SQL.
last_statement_sql_handle varbinary(64) Um token que identifica de forma única o procedimento em lote ou armazenado da última instrução compilada que necessitava deste índice. Usado pela Loja de Consultas. Ao contrário de last_sql_handle, sys.query_store_query_text faz referência ao statement_sql_handle utilizado pela vista de catálogo da Loja de Consulta sys.query_store_query_text.

Retorna 0 se a Loja de Consultas não estava ativada quando a consulta foi compilada.
user_seeks bigint Número de pesquisas causadas por consultas de utilizadores para as quais o índice recomendado no grupo poderia ter sido usado.
user_scans bigint Número de varreduras causadas por consultas de utilizador para as quais o índice recomendado no grupo poderia ter sido usado.
last_user_seek datetime Data e hora da última busca causadas por consultas dos utilizadores para as quais o índice recomendado no grupo poderia ter sido usado.
last_user_scan datetime Data e hora da última análise causadas por consultas dos utilizadores para as quais o índice recomendado no grupo poderia ter sido usado.
avg_total_user_cost float Custo médio das consultas dos utilizadores que poderia ser reduzido pelo índice do grupo.
avg_user_impact float Benefício percentual médio que as consultas dos utilizadores poderiam experienciar se este grupo de índice em falta fosse implementado. O valor significa que o custo da consulta diminuiria, em média, esta percentagem se este grupo de índice em falta fosse implementado.
system_seeks bigint Número de pesquisas causadas por consultas do sistema, como consultas de autoestatísticas, para as quais o índice recomendado no grupo poderia ter sido usado. Para mais informações, consulte Auto Stats Event Class.
system_scans bigint Número de digitalizações causadas por consultas do sistema para as quais o índice recomendado no grupo poderia ter sido utilizado.
last_system_seek datetime Data e hora da última pesquisa do sistema são causadas por consultas do sistema para as quais o índice recomendado no grupo poderia ter sido usado.
last_system_scan datetime Data e hora da última varredura do sistema causadas por consultas do sistema para as quais o índice recomendado no grupo poderia ter sido usado.
avg_total_system_cost float O custo médio das consultas do sistema que poderia ser reduzido pelo índice no grupo.
avg_system_impact float Benefício percentual médio que as consultas do sistema poderiam experienciar se este grupo de índice em falta fosse implementado. O valor significa que o custo da consulta diminuiria, em média, esta percentagem se este grupo de índice em falta fosse implementado.

Observações

A informação devolvida sys.dm_db_missing_index_group_stats_query por é atualizada em cada execução de consulta, não em cada compilação ou recompilação de consultas. As estatísticas de utilização não são mantidas e são mantidas apenas até o motor da base de dados ser reiniciado.

Os administradores de bases de dados devem periodicamente fazer cópias de segurança da informação de índice em falta se quiserem manter as estatísticas de utilização após a reciclagem do servidor. Use a sqlserver_start_time coluna no sys.dm_os_sys_info para localizar a última hora de inicialização do mecanismo de banco de dados. Também pode persistir índices em falta com a Loja de Consultas.

Permissions

Para consultar esta vista de gestão dinâmica, os utilizadores devem receber a VIEW SERVER STATE permissão ou qualquer permissão que implique essa VIEW SERVER STATE permissão, para o SQL Server 2019 (15.x) e versões anteriores.

Requer permissão VIEW SERVER PERFORMANCE STATE no servidor, para SQL Server 2022 (16.x) e versões posteriores.

Examples

Os exemplos seguintes ilustram como usar a vista de sys.dm_db_missing_index_group_stats_query gestão dinâmica.

A. Encontre o texto de consulta mais recente para as 10 melhorias mais esperadas para consultas de utilizadores

A consulta seguinte devolve o último texto de consulta registado para os 10 índices em falta que produziriam a maior melhoria cumulativa antecipada, por ordem decrescente.

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;