Share via


À propos de la fonctionnalité d'index manquants

La fonctionnalité d'index manquants utilise des objets de gestion dynamique et Showplan pour fournir des informations relatives aux index manquants susceptibles d'améliorer les performances des requêtes SQL Server.

Composants

Lorsque l'optimiseur de requête génère un plan de requête, celui-ci analyse quels sont les meilleurs index pour une condition de filtre donnée. Si les meilleurs index n'existent pas, l'optimiseur de requête génère un plan de requête sous-optimisé mais stocke les informations relatives à ces index. La fonctionnalité d'index manquants vous permet d'accéder aux informations relatives à ces index afin de vous permettre de décider de les implémenter ou non.

La fonctionnalité d'index manquants se compose des éléments suivants :

  • Un jeu d'objets de gestion dynamique dont l'interrogation retourne des informations relatives aux index manquants.

  • L'élément MissingIndexes dans Showplans XML qui met en corrélation les index jugés manquants par l'optimiseur avec les requêtes pour lesquelles ils sont manquants.

Les composants de la fonctionnalité d'index manquants sont évoqués en détails dans les sections suivantes.

Objets de gestion dynamique

Après l'exécution d'une charge de travail standard sur SQL Server, vous pouvez extraire des informations relatives aux index manquants en interrogeant les objets de gestion dynamique répertoriés dans la table suivante. Ces objets sont stockés dans la base de données master.

Objet de gestion dynamique

Informations retournées

sys.dm_db_missing_index_group_stats (Transact-SQL)

Retourne les informations de synthèse sur les groupes d'index manquants, par exemple, les performances accrues qu'il est possible d'obtenir en implémentant un groupe spécifique d'index manquants.

sys.dm_db_missing_index_groups (Transact-SQL)

Retourne les informations sur un groupe spécifique d'index manquants comme l'identificateur de groupe et les identificateurs de tous les index manquants contenus dans ce groupe.

sys.dm_db_missing_index_details (Transact-SQL)

Retourne les informations détaillées sur un index manquant ; par exemple, le nom et l'identificateur de la table de l'index manquant ainsi que les colonnes et les types de colonne qui composent l'index manquant.

sys.dm_db_missing_index_columns (Transact-SQL)

Retourne les informations relatives aux colonnes de la table de la base de données auxquelles un index fait défaut.

Vous pouvez utiliser les informations retournées par ces objets de gestion dynamique avec des outils ou des scripts qui utilisent ces informations pour générer les instructions DDL CREATE INDEX qui implémentent les index manquants.

Cohérence des transactions

Les modifications individuelles apportées aux lignes dans ces objets de gestion dynamique manquent de cohérence sur un plan transactionnel. Autrement dit, si une requête est annulée ou si la transaction jointe est en cours de restauration, les lignes contenant les informations relatives aux index manquants de cette requête continuent d'exister.

Seules les transactions complètes sont prises en charge. Les points de contrôle et les annulations partielles ne sont pas pris en charge.

[!REMARQUE]

En cas de modification des métadonnées d'une table, toutes les informations de l'index manquant relatives à cette table sont supprimées de ces objets de gestion dynamique. Les modifications des métadonnées d'une table peuvent se produire notamment lors de l'ajout ou de la suppression des colonnes d'une table ou lors de la création d'un index sur la colonne d'une table.

Élément MissingIndexes de Showplan XML

Pour mettre en corrélation les requêtes avec les index manquants identifiés dans les résultats des objets de gestion dynamique, vous pouvez afficher l'élément MissingIndexes dans Showplans XML. Cet élément MissingIndexes est illustré par l'exemple suivant :

<ShowPlanXML…>

 <BatchSequence>

  <Batch>

   <Statements>

    <StmtSimple…>

     <StatementSetOptions… />

      <QueryPlan…>

       <MissingIndexes>

        <MissingIndexGroup Impact="22.8764">

         <MissingIndex Database="[ADVENTUREWORKS]" 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>

Les informations contenues dans l'élément MissingIndexes peuvent vous permettre de déterminer quels index sont susceptibles d'améliorer les performances de la requête spécifique décrite dans l'élément StmtSimple qui inclut l'instruction Transact-SQL elle-même. Puis, à l'aide des informations retournées pour cet élément, vous pouvez écrire une instruction DDL CREATE INDEX.

Activation et désactivation de la fonctionnalité d'index manquants

Cette fonctionnalité est activée par défaut. Aucun contrôle disponible ne permet d'activer ou de désactiver cette fonctionnalité ou de rétablir les tables retournées lors de l'interrogation des objets de gestion dynamique. Au redémarrage de SQL Server, toutes les informations de l'index manquant sont supprimées.

Cette fonctionnalité ne peut être que désactivée si une instance de SQL Server est démarrée en utilisant l'argument -x de l'utilitaire d'invite de commandes sqlservr. Pour plus d'informations, consultez Application sqlservr.