sys.dm_db_missing_index_details (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Retorna informações detalhadas sobre índices ausentes.
No Banco de Dados SQL do Azure, as exibições de gerenciamento dinâmico não podem expor informações que afetariam 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 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 | Descrição |
---|---|---|
index_handle | int | Identifica um determinado índice ausente. O identificador é exclusivo no servidor. index_handle é a chave desta tabela. |
database_id | smallint | Identifica o banco de dados onde reside a tabela com o índice ausente. No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou em um pool elástico, mas não em um servidor lógico. |
object_id | int | Identifica a tabela onde o índice está ausente. |
equality_columns | nvarchar(4000) | Lista separada por vírgulas de colunas que contribuem para os predicados de igualdade do formulário: table.column = constant_value |
inequality_columns | nvarchar(4000) | Lista separada por vírgulas de colunas que contribuem para predicados de desigualdade, por exemplo, predicados do formulário: table.column>constant_value Qualquer operador de comparação diferente de "=" expressa desigualdade. |
included_columns | nvarchar(4000) | Lista separada por vírgulas de colunas necessárias como colunas de cobertura para a consulta. Para obter mais informações sobre colunas de cobertura ou incluídas, consulte Criar índices com colunas incluídas. Para índices com otimização de memória (hash e não clusterizados com otimização de memória), ignore included_columns o . Todas as colunas da tabela são incluídas em cada índice com otimização de memória. |
instrução | nvarchar(4000) | Nome da tabela onde o índice está ausente. |
Comentários
As informações retornadas por sys.dm_db_missing_index_details
são atualizadas quando uma consulta é otimizada pelo otimizador de consulta e não são persistentes. As informações de índice ausentes 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 mantê-las 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.
Para determinar de quais grupos de índices ausentes um determinado índice ausente faz parte, você pode consultar a sys.dm_db_missing_index_groups
exibição de gerenciamento dinâmico associando-a sys.dm_db_missing_index_details
com base index_handle
na coluna.
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.
Usando informações de índice ausente em instruções CREATE INDEX
Para converter as informações retornadas por sys.dm_db_missing_index_details
em uma instrução CREATE INDEX para índices com otimização de memória e baseados em disco, as colunas de igualdade devem ser colocadas antes das colunas de desigualdade e, juntas, devem formar a chave do índice. As colunas incluídas devem ser adicionadas à instrução CREATE INDEX com a cláusula INCLUDE. Para determinar uma ordem efetiva para as colunas desiguais, ordene-as com base em sua seletividade: liste as colunas mais seletivas primeiro (a mais à esquerda na lista de colunas). Saiba mais em Ajustar índices não clusterizados com sugestões de índice ausente, incluindo Limitações do recurso de índice ausente.
Para obter mais informações sobre índices com otimização de memória, consulte Índices para tabelas com otimização de memória.
Consistência de transação
Se uma transação criar ou descartar uma tabela, as linhas contendo as informações de índice ausente sobre os objetos descartados serão removidas do objeto de gerenciamento dinâmico, preservando a consistência da transação. Saiba mais sobre as limitações do recurso de índice ausente.
Permissões
No SQL Server e na Instância Gerenciada de SQL, requer a permissão VIEW SERVER STATE
.
Nos objetivos de serviço do Banco de Dados SQL Básico, S0 e S1 e para bancos de dados em pools elásticos, é necessário ter a conta do administrador do servidor, a conta do administrador do Microsoft Entra ou a associação à ##MS_ServerStateReader##
função de servidor. Em todos os outros objetivos de serviço do Banco de Dados SQL, a permissão VIEW DATABASE STATE
no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##
são necessárias.
Permissões do SQL Server 2022 e posteriores
É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Exemplos
O exemplo a seguir retorna sugestões de índice ausentes para o banco de dados atual. As sugestões de índice ausente devem ser combinadas quando possível entre si e com os índices existentes no banco de dados atual. Saiba como aplicar essas sugestões em ajustar índices não clusterizados com sugestões de índice ausente.
SELECT
CONVERT (varchar(30), getdate(), 126) AS runtime, mig.index_group_handle, mid.index_handle,
CONVERT (decimal (28, 1), migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) ) AS improvement_measure,
'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + ' (' + ISNULL (mid.equality_columns, '') + CASE
WHEN mid.equality_columns IS NOT NULL
AND mid.inequality_columns IS NOT NULL THEN ','
ELSE ''
END + ISNULL (mid.inequality_columns, '') + ')' + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE CONVERT (decimal (28, 1),migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) > 10
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC
Observação
O script Index-Creation da Caixa de Ferramentas da Tiger da Microsoft examina DMVs de índices ausentes e remove automaticamente os índices sugeridos redundantes, analisa índices de baixo impacto e gera scripts de criação de índice para sua revisão. Como na consulta acima, ele NÃO executa comandos de criação de índice. O script Index-Creation é adequado para o SQL Server e a Instância Gerenciada de SQL do Azure. Para o Banco de Dados SQL do Azure, considere implementar o ajuste automático de índice.
Próximas etapas
Saiba mais sobre o recurso de índice ausente nos seguintes artigos:
- Ajustar índices não clusterizados com sugestões de índice ausente
- sys.dm_db_missing_index_columns (Transact-SQL)
- sys.dm_db_missing_index_groups (Transact-SQL)
- sys.dm_db_missing_index_group_stats (Transact-SQL)
- sys.dm_db_missing_index_group_stats_query (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)