Partager via


Liste de vérification pour l'analyse des requêtes longues à s'exécuter

Les requêtes ou les mises à jour qui prennent davantage de temps que prévu sont dues à diverses raisons. Elles peuvent être la conséquence de problèmes de performances en rapport avec le réseau ou l'ordinateur qui exécute SQL Server. Elles peuvent également être dues à la structure physique de votre base de données.

Il existe un certain nombre de facteurs courants qui entraînent une exécution lente des requêtes et des mises à jour :

  • lenteur des communications sur le réseau ;

  • mémoire inadaptée de l'ordinateur serveur ou mémoire disponible insuffisante pour SQL Server ;

  • manque de statistiques utiles ;

  • manque d'index utiles ;

  • manque de vues indexées utiles ;

  • manque d'entrelacements de données utiles ;

  • manque de partitionnements utiles.

Lorsqu'une requête ou une mise à jour est plus longue à s'exécuter que prévu, posez-vous les questions suivantes qui concernent les raisons mentionnées au paragraphe précédent :

ConseilConseil

Pour gagner du temps, examinez cette liste de vérification avant de contacter le support technique.

  1. Le problème de performances est-il lié à un élément autre que des requêtes ? Par exemple, s'agit-il de la lenteur du réseau ? Existe-t-il d'autres éléments susceptibles de provoquer ou de contribuer à cette baisse des performances ?

    Vous pouvez utiliser le Moniteur système Windows pour surveiller les performances de SQL Server mais aussi celles des composants connexes non SQL Server. Pour plus d'informations, consultez Surveillance de l'utilisation des ressources (Moniteur système).

  2. Si le problème est lié aux requêtes, quelle requête ou jeu de requêtes concerne-t-il ?

    Utilisez le SQL Server Profiler pour identifier la ou les requêtes lentes. Pour plus d'informations, consultez Utilisation du Générateur de profils SQL Server. Utilisez les vue de gestion dynamique sys.dm_exec_query_stats et sys.dm_exec_requests pour rechercher des requêtes semblables qui collectivement consomment un grand nombre de ressources. Pour plus d'informations, consultez Recherche et paramétrage de requêtes semblables à l'aide de requête et de hachages de plan de requête.

  3. Comment est-ce que j'analyse la performance d'une requête à exécution lente ?

    Après avoir identifié les requêtes dont l'exécution est lente, vous pouvez analyser plus avant les performances des requêtes incriminées en générant un Showplan, qui peut être un texte, un fichier XML ou une représentation graphique du plan d'exécution des requêtes que génère l'optimiseur de requête. Vous pouvez générer un Showplan à l'aide des options SET de Transact-SQL, de SQL Server Management Studio ou de SQL Server Profiler.

    Pour plus d'informations sur l'utilisation des options SET de Transact-SQL pour afficher un texte et des plans d'exécution XML, consultez Affichage des plans d'exécution à l'aide des options Showplan SET (Transact-SQL).

    Pour plus d'informations sur l'utilisation de SQL Server Management Studio pour afficher des plans d'exécution graphique, consultez Affichage de plans d'exécution graphique (SQL Server Management Studio).

    Pour plus d'informations sur l'utilisation de SQL Server Profiler pour afficher un texte et des plans d'exécution XML, consultez Affichage des plans d'exécution en utilisant des classes d'événements dans le Générateur de profils SQL Server.

    Les informations collectées par ces outils permettent de définir comment une requête est exécutée par l'optimiseur de requête SQL Server, ainsi que les index à utiliser. Ces informations permettent aussi de savoir si des améliorations de performances sont possibles en réécrivant la requête, en changeant les index des tables ou, éventuellement, en modifiant la structure de la base de données. Pour plus d'informations, consultez Analyse d'une requête.

  4. La requête a-t-elle été exécutée de façon optimale à l'aide des statistiques appropriées ?

    L'optimiseur de requête utilise des statistiques dans l'optique de créer des plans de requête qui améliorent les performances des requêtes. Pour la plupart des requêtes, l'optimiseur de requête génère déjà les statistiques utiles à un plan de requête de haute qualité ; dans certains cas, vous devez créer des statistiques supplémentaires ou modifier la conception des requêtes pour obtenir des résultats optimaux.

    Pour plus d'informations, consultez Utilisation des statistiques pour améliorer les performances des requêtes. Cette rubrique fournit des recommandations pour améliorer l'efficacité des statistiques et ainsi optimiser les performances des requêtes. Ces recommandations sont les suivants :

    • Utilisation des options de statistiques à l'échelle de la base de données. Par exemple, vous devez vérifier que les options de création automatique de statistiques AUTO_CREATE_STATISTICS et de mise à jour automatique des statistiques AUTO_UPDATE_STATISTICS à l'échelle de la base de données sont activées. Si elles sont désactivées, les plans de requête risquent de ne pas être optimisés et les performances des requêtes peuvent se dégrader.

    • Quand créer des statistiques. Dans certains cas, vous pouvez améliorer les plans de requête en créant des statistiques supplémentaires à l'aide de l'instruction CREATE STATISTICS (Transact-SQL). Ces statistiques supplémentaires peuvent capturer des corrélations statistiques dont l'optimiseur de requête ne tient pas compte lorsqu'il crée des statistiques pour des index ou des colonnes uniques.

    • Quand mettre à jour les statistiques. Dans certains cas, vous pouvez améliorer le plan de requête et donc les performances des requêtes en mettant à jour les statistiques de façon plus régulière que lorsque l'option AUTO_UPDATE_STATISTICS est activée. Vous pouvez mettre à jour les statistiques à l'aide de l'instruction UPDATE STATISTICS ou de la procédure stockée sp_updatestats.

    • Conception de requêtes pour une utilisation efficace des statistiques. Certaines implémentations de requête, telles que les variables locales et les expressions complexes contenues dans le prédicat de requête, peuvent produire des plans de requête non optimaux. Cela peut s'éviter en suivant les recommandations en matière de conception de requêtes pour une utilisation efficace des statistiques.

  5. Des index adaptés sont-ils disponibles ? L'ajout d'un ou plusieurs index est-il susceptible d'améliorer les performances des requêtes ? Pour plus d'informations, consultez Consignes générales pour la création d'index, Recherche d'index manquants et Vue d'ensemble de l'Assistant Paramétrage du moteur de base de données. L'Assistant Paramétrage du moteur de base de données peut également recommander de créer des statistiques nécessaires.

  6. Existe-t-il des groupes d'instructions concernant les données ou les index ? Envisagez l'utilisation de l'entrelacement des fichiers sur plusieurs disques. L'entrelacement des fichiers sur plusieurs disques peut se mettre en œuvre au moyen de disques RAID au niveau 0 sur lesquels les données sont réparties sur plusieurs disques. Pour plus d'informations, consultez Utilisation des fichiers et des groupes de fichiers et RAID.

  7. L'optimiseur de requête représente-t-il la meilleure solution pour exécuter de façon optimale une requête complexe ? Pour plus d'informations, consultez Recommandations pour le paramétrage des requêtes.

  8. Si vous avez un volume de données important, avez-vous besoin de le partitionner ? La facilité de gestion des données est le principal avantage du partitionnement. Cependant, si vos tables et index sont partitionnés de la même manière, le partitionnement peut également améliorer les performances des requêtes. Pour plus d'informations, consultez Présentation du partitionnement et Paramétrage du modèle physique de la base de données.

Historique des modifications

Mise à jour du contenu

Contenu sur les statistiques mis à jour pour expliquer la façon de vérifier que les statistiques à disposition sont utiles.

Cette rubrique fait référence au nouveau contenu sur les statistiques dans la rubrique Utilisation des statistiques pour améliorer les performances des requêtes.