sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Aplica-se a: banco de dados SQL do Azure 2019 (15.x) SQL ServerInstância Gerenciada de SQL do Azure

Retorna informações sobre consultas que precisavam de um índice ausente de grupos de índices ausentes, excluindo índices espaciais. Mais de uma consulta pode ser retornada por grupo de índice ausente. Um grupo de índices ausente pode ter várias consultas que precisavam do mesmo índice.

No banco de dados SQL do Azure, as exibições de gerenciamento dinâmico não podem expor informações que afetem a contenção do banco de dados ou expor informações sobre outros bancos de dados aos quais o usuário tem acesso. Para evitar expor essas 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 Descrição
group_handle int Identifica um grupo de índices ausentes. Esse identificador é exclusivo no servidor.

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

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

Pode ser ingressado index_group_handle em sys.dm_db_missing_index_groups.
query_hash binary(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 recurso de agregação usado para consultas que são diferentes apenas nos valores literais.
query_plan_hash binary(8) Valor de hash binário calculado no plano de execução de consulta e usado para identificar planos de execução de consulta semelhantes. Você pode usar o hash de plano de consulta para localizar o custo cumulativo de consultas com planos de execução semelhantes.

Sempre será 0x000 quando um procedimento armazenado compilado nativamente consultar uma tabela com otimização de memória.
last_sql_handle varbinary(64) É um token que identifica exclusivamente o lote ou o procedimento armazenado da última instrução compilada que precisava desse índice.

O last_sql_handle pode ser usado para recuperar o texto SQL da consulta chamando a função de gerenciamento dinâmico sys.dm_exec_sql_text.
last_statement_start_offset int Indica, em bytes, começando com 0, a posição inicial da consulta que a linha descreve dentro do texto de seu lote ou objeto persistente para a última instrução compilada que precisava desse índice em seu lote SQL.
last_statement_end_offset int Indica, em bytes, começando com 0, a posição final da consulta que a linha descreve dentro do texto de seu lote ou objeto persistente para a última instrução compilada que precisava desse índice em seu lote SQL.
last_statement_sql_handle varbinary(64) É um token que identifica exclusivamente o lote ou o procedimento armazenado da última instrução compilada que precisava desse índice. Usado por Repositório de Consultas. Ao contrário last_sql_handlede , sys.query_store_query_text faz referência ao statement_sql_handle usado pelo sys.query_store_query_text de exibição de catálogo Repositório de Consultas.

Se Repositório de Consultas não tiver sido habilitado quando a consulta foi compilada, retornará 0.
user_seeks bigint Número de buscas geradas por consultas de usuário para as quais o índice recomendado no grupo poderia ter sido usado.
user_scans bigint Número de exames gerados por consultas de usuário para as quais o índice recomendado no grupo poderia ter sido usado.
last_user_seek datetime Data e hora da última busca gerada por consultas de usuário para as quais o índice recomendado no grupo poderia ter sido usado.
last_user_scan datetime Data e hora do último exame gerado por consultas de usuário para as quais o índice recomendado no grupo poderia ter sido usado.
avg_total_user_cost float Custo médio das consultas de usuário que poderia ser reduzido pelo índice no grupo.
avg_user_impact float Benefício da porcentagem média que as consultas de usuário poderiam experimentar se esse grupo de índices ausentes fosse implementado. O valor indica que o custo da consulta ficaria na média dessa porcentagem se esse grupo de índices ausentes fosse implementado.
system_seeks bigint Número de buscas geradas por consultas de sistema, como consultas de estatística automáticas, para as quais o índice recomendado no grupo poderia ter sido usado. Para obter mais informações, consulte Auto Stats Event Class.
system_scans bigint Número de exames gerados por consultas de sistema para as quais o índice recomendado no grupo poderia ter sido usado.
last_system_seek datetime Data e hora da última busca gerada no sistema por consultas de sistema para as quais o índice recomendado no grupo poderia ter sido usado.
last_system_scan datetime Data e hora do último exame gerado no sistema por consultas de sistema para as quais o índice recomendado no grupo poderia ter sido usado.
avg_total_system_cost float Custo médio das consultas de sistema que poderia ser reduzido pelo índice no grupo.
avg_system_impact float Benefício de porcentagem média que as consultas de sistema poderiam experimentar se esse grupo de índices ausentes fosse implementado. O valor indica que o custo da consulta ficaria na média dessa porcentagem se esse grupo de índices ausentes fosse implementado.

Comentários

As informações retornadas por sys.dm_db_missing_index_group_stats_query são atualizadas por cada execução de consulta, não por cada compilação ou recompilação de consulta. As estatísticas de uso não são persistentes e são mantidas somente até que o mecanismo de banco de dados seja reiniciado.

Os administradores de banco de dados devem periodicamente gerar cópias de backup de informações de índice ausente se quiserem manter as estatísticas de uso após o desligamento e a reinicialização do servidor. Use a coluna sqlserver_start_time em sys.dm_os_sys_info para localizar a última hora de inicialização do mecanismo de banco de dados. Você também pode persistir índices ausentes com Repositório de Consultas.

Observação

O conjunto de resultados para essa DMV é limitado a 600 linhas. Cada linha contém um índice ausente. Se você tiver mais de 600 índices ausentes, deverá abordar os índices ausentes existentes para poder exibir os mais recentes.

Permissões

Para consultar essa exibição de gerenciamento dinâmico, os usuários devem receber a permissão VIEW SERVER STATE ou qualquer permissão que implique essa permissão.

Permissões para SQL Server 2022 e posterior

Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Exemplos

Os exemplos a seguir ilustram como usar a sys.dm_db_missing_index_group_stats_query exibição de gerenciamento dinâmico.

a. Encontre o texto de consulta mais recente para os 10 aprimoramentos mais esperados para consultas de usuário

A consulta a seguir retorna o último texto de consulta registrado para os 10 índices ausentes que produziriam a melhoria cumulativa mais esperada, em 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; 

Próximas etapas

Saiba mais sobre o recurso de índice ausente e os conceitos relacionados nos seguintes artigos: