Compartilhar via


Sobre o recurso de índices ausentes

O recurso de índices ausentes usa objetos de gerenciamento dinâmicos e Plano de execução para fornecer informações sobre índices ausentes que poderiam aprimorar o desempenho de consulta SQL Server.

Componentes

Quando o otimizador de consulta gera um plano de consulta, ele analisa quais são os melhores índices para uma condição de filtro específica. Se os melhores índices não existirem, o otimizador de consulta gerará um plano de consulta inferior, mas ainda armazena informações sobre esses índices. O recurso de índices ausente permite acessar informações sobre esses índices para que você possa decidir se deveriam ser implementados.

O recurso de índices ausentes consiste dos seguintes componentes:

  • Um conjunto de objetos de gerenciamento dinâmico que pode ser consultado para retornar informações sobre índices ausentes.

  • O elemento MissingIndexes em Planos de execução XML que correlata índices que o otimizador de consulta considera ausentes nas consultas para as quais eles estão ausentes.

Os componentes do recurso de índices ausentes são discutidos em detalhes nas seções a seguir.

Objetos de gerenciamento dinâmico

Depois de executar uma carga de trabalho típica em SQL Server, você pode recuperar informações sobre índices consultando os objetos de gerenciamento dinâmicos listados na tabela a seguir. Esses objetos de gerenciamento dinâmicos são armazenados no banco de dadosmestre.

Objeto de gerenciamento dinâmico

Informações retornadas

sys.dm_db_missing_index_group_stats (Transact-SQL)

Retorna informações de resumos sobre grupos de índice ausentes, por exemplo, as melhorias de desempenho que podem ocorrer ao implementar um grupo específico de índices ausentes.

sys.dm_db_missing_index_groups (Transact-SQL)

Retorna informações sobre um grupo específico de índices ausentes, como o identificador de grupo e os identificadores de todos os índices ausentes que estão contidos naquele grupo.

sys.dm_db_missing_index_details (Transact-SQL)

Retorna informações detalhadas sobre um índice ausente; por exemplo, retorna o nome e identificador da tabela onde o índice está ausente, e os tipos de coluna e colunas que deveriam formar o índice ausente.

sys.dm_db_missing_index_columns (Transact-SQL)

Retorna informações sobre as colunas de tabela de banco de dados em que está faltando um índice.

Você pode usar as informações retornadas por estes objetos de gerenciamento dinâmicos com ferramentas ou scripts que usam as informações para gerar instruções CREATE INDEX DDL que implementarão os índices ausentes.

Consistência de transação

Modificações individuais para linhas nesses objetos de gerenciamento dinâmicos não são consistentes transacionalmente. Ou seja, se uma consulta for anulada ou a transação envolvida revertida, as linhas que contêm informações sobre os índices ausentes para aquela consulta ainda existirão.

Somente há suporte para transações inteiras. Não há suporte para pontos de verificação e reversões parciais.

ObservaçãoObservação

Quando os metadados para uma tabela alterarem, todas as informações de índice ausente sobre aquela tabela são excluídas desses objetos de gerenciamento dinâmicos. Mudanças de metadados de tabela podem ocorrer quando colunas são adicionadas ou descartadas de uma tabela, por exemplo, ou quando um índice é criado em uma coluna de uma tabela.

Elemento MissingIndexes do Plano de execução XML

Para correlacionar consultas com os índices ausentes que são identificados em resultados de objeto de gerenciamento dinâmicos, você pode exibir o elemento MissingIndexes em Planos de execução XML. O elemento MissingIndexes é ilustrado no seguinte exemplo:

<ShowPlanXML…>

 <BatchSequence>

  <Batch>

   <Statements>

    <StmtSimple…>

     <StatementSetOptions… />

      <QueryPlan…>

        <MissingIndexes>

        <MissingIndexGroup Impact="22.8764">

         <MissingIndex Database="[ADVENTUREWORKS2008R2]" Schema="[Person]" Table="[Address]">

          <ColumnGroup Usage="EQUALITY">

           <Column Name="[PostalCode]" ColumnId="4" />

          </ColumnGroup>

          <ColumnGroup Usage="INEQUALITY">

           <Column Name="[ModifiedDate]" ColumnId="5" />

          </ColumnGroup>

          <ColumnGroup Usage="INCLUDE">

           <Column Name="[AddressLine1]" ColumnId="2" />

           <Column Name="[AddressLine2]" ColumnId="3" />

           <Column Name="[StateProvinceID]" ColumnId="1" />

          </ColumnGroup>

         </MissingIndex>

        </MissingIndexGroup>

       </MissingIndexes>

As informações contidas no elemento MissingIndexes podem lhe ajudar a determinar que índices melhorariam o desempenho da consulta específica descrita no elemento StmtSimple, que inclui a própria instrução Transact-SQL. Então, usando as informações retornadas para este elemento, você pode gravar uma instrução CREATE INDEX DDL.

Habilitando e desabilitando o Recurso de índices ausentes

O recurso de índices ausentes está ativado por padrão. Nenhum controle é fornecido para ativar ou desativar o recurso, ou para redefinir quaisquer das tabelas retornadas quando os objetos de gerenciamento dinâmicos são consultados. Quando SQL Server é reinicializado, todas as informações de índice ausente são canceladas.

Este recurso só poderá ser desabilitado se uma instância de SQL Server for iniciada usando o argumento - x com o utilitário do prompt de comandosqlservr. Para obter mais informações, consulte Aplicativo sqlservr.