Share via


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

S’applique à : base de données Azure SQL SQL Server 2019 (15.x)Azure SQL Managed Instance

Retourne des informations sur les requêtes qui nécessitaient un index manquant à partir de groupes d’index manquants, à l’exclusion des index spatiaux. Plusieurs requêtes peuvent être retournées par groupe d’index manquant. Un groupe d’index manquant peut avoir plusieurs requêtes qui nécessitaient le même index.

Dans Azure SQL base de données, les vues de gestion dynamique ne peuvent pas exposer des informations qui auraient un impact sur le confinement de la base de données ou exposer des informations sur d’autres bases de données auxquelles l’utilisateur a accès. Pour éviter d’exposer ces informations, chaque ligne qui contient des données qui n’appartiennent pas au locataire connecté est filtrée.

Nom de la colonne Type de données Description
group_handle int Identifie un groupe d'index manquant. Cet identificateur est unique sur le serveur.

Les autres colonnes fournissent des informations sur toutes les requêtes pour lesquelles l'index du groupe est considéré comme manquant.

Un groupe d'index ne contient qu'un seul index.

Peut être joint à index_group_handle dans sys.dm_db_missing_index_groups.
query_hash binary(8) La valeur de hachage binaire calculée sur la requête et utilisée pour identifier des requêtes avec une logique similaire. Vous pouvez utiliser le hachage de requête pour déterminer l'utilisation des ressources globale pour les requêtes qui diffèrent uniquement par les valeurs littérales.
query_plan_hash binary(8) Valeur de hachage binaire calculée sur le plan d'exécution de requête et utilisée pour identifier des plans d'exécution de requête semblables. Vous pouvez utiliser le hachage de plan de requête pour rechercher le coût cumulatif de requêtes avec les plans d'exécution semblables.

Sa valeur est toujours 0x000 lorsqu'une procédure stockée compilée en mode natif interroge une table optimisée en mémoire.
last_sql_handle varbinary(64) Jeton qui identifie de manière unique le lot ou la procédure stockée de la dernière instruction compilée qui nécessitait cet index.

Le last_sql_handle peut être utilisé pour récupérer le texte SQL de la requête en appelant la fonction de gestion dynamique sys.dm_exec_sql_text.
last_statement_start_offset int Indique, en octets, en commençant par 0, la position de départ de la requête que la ligne décrit dans le texte de son lot ou de son objet persistant pour la dernière instruction compilée qui avait besoin de cet index dans son lot SQL.
last_statement_end_offset int Indique, en octets, commençant par 0, la position de fin de la requête que la ligne décrit dans le texte de son lot ou de son objet persistant pour la dernière instruction compilée qui avait besoin de cet index dans son lot SQL.
last_statement_sql_handle varbinary(64) Jeton qui identifie de manière unique le lot ou la procédure stockée de la dernière instruction compilée qui nécessitait cet index. Utilisé par Magasin des requêtes. Contrairement à last_sql_handle, sys.query_store_query_text fait référence au statement_sql_handle utilisé par l’sys.query_store_query_text d’affichage catalogue Magasin des requêtes.

Si Magasin des requêtes n’a pas été activé lors de la compilation de la requête, retourne 0.
user_seeks bigint Nombre de recherches résultant de requêtes utilisateur pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé.
user_scans bigint Nombre d'analyses résultant de requêtes utilisateur pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé.
last_user_seek datetime Date et heure de la dernière recherche résultant de requêtes utilisateur pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé.
last_user_scan datetime Date et heure de la dernière analyse résultant de requêtes utilisateur pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé.
avg_total_user_cost float Coût moyen des requêtes utilisateur qui pourrait être réduit grâce à l'index du groupe.
avg_user_impact float Bénéfice moyen (en pourcentage) dont les requêtes utilisateur pourraient tirer parti si ce groupe d'index manquants était implémenté. Cela signifie que le coût des requêtes diminuerait, en moyenne, de la valeur de ce pourcentage si ce groupe d'index manquants était implémenté.
system_seeks bigint Nombre de recherches résultant de requêtes système (telles que les requêtes de statistiques automatiques) pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé. Pour plus d’informations, consultez Auto Stats Event Class.
system_scans bigint Nombre d'analyses résultant de requêtes système pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé.
last_system_seek datetime Date et heure de la dernière recherche système résultant de requêtes système pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé.
last_system_scan datetime Date et heure de la dernière analyse système résultant de requêtes système pour lesquelles l'index recommandé du groupe pourrait avoir été utilisé.
avg_total_system_cost float Coût moyen des requêtes système qui pourrait être réduit grâce à l'index du groupe.
avg_system_impact float Bénéfice moyen (en pourcentage) dont les requêtes système pourraient tirer parti si ce groupe d'index manquants était implémenté. Cela signifie que le coût des requêtes diminuerait, en moyenne, de la valeur de ce pourcentage si ce groupe d'index manquants était implémenté.

Notes

Les informations retournées par sys.dm_db_missing_index_group_stats_query sont mises à jour à chaque exécution de requête, et non à chaque compilation ou recompilation de requête. Les statistiques d’utilisation ne sont pas conservées et sont conservées uniquement jusqu’à ce que le moteur de base de données soit redémarré.

Les administrateurs de base de données doivent effectuer régulièrement des copies de sauvegarde des informations sur les index manquants s'ils souhaitent conserver les statistiques d'utilisation après le recyclage du serveur. Utilisez la colonne sqlserver_start_time dans sys.dm_os_sys_info pour rechercher la dernière heure de démarrage du moteur de base de données. Vous pouvez également conserver les index manquants avec Magasin des requêtes.

Notes

Le jeu de résultats pour cette DMV est limité à 600 lignes. Chaque ligne contient un index manquant. Si vous avez plus de 600 index manquants, vous devez traiter les index manquants existants afin de pouvoir ensuite afficher les plus récents.

Autorisations

Pour interroger cette vue de gestion dynamique, les utilisateurs doivent bénéficier de l'autorisation VIEW SERVER STATE ou de tout privilège qui implique l'autorisation VIEW SERVER STATE.

Autorisations pour SQL Server 2022 et versions ultérieures

Nécessite l’autorisation VIEW SERVER PERFORMANCE STATE sur le serveur.

Exemples

Les exemples suivants illustrent comment utiliser la sys.dm_db_missing_index_group_stats_query vue de gestion dynamique.

R. Recherchez le texte de requête le plus récent pour les 10 améliorations les plus attendues pour les requêtes utilisateur

La requête suivante retourne le dernier texte de requête enregistré pour les 10 index manquants qui produiraient l’amélioration cumulative la plus élevée prévue, dans l’ordre décroissant.

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; 

Étapes suivantes

Pour en savoir plus sur la fonctionnalité d’index manquante et les concepts connexes, consultez les articles suivants :