Le profilage des requêtes vous permet de comprendre ce qui se passe dans la boîte noire des performances de SQL Server.
C'est facile pour les utilisateurs. Les DBA ne le font pas.
Pensez aux options simples dont disposent les utilisateurs lorsqu'une application de base de données fonctionne mal :
- Allez prendre un café et attendez.
- Insulter l'ordinateur.
- Se plaindre aux autres utilisateurs.
- Soumettre un ticket d'incident.
N'est-ce pas la vie de Riley comparée aux options dont vous disposez en tant que DBA ?
- Recherchez les sessions bloquées.
- Vérifiez les taux d'accès au cache de tampon.
- Mesurer l'attente d'E/S maximale.
- Examinez l'espérance de vie des pages.
- Vérifiez si des index sont manquants ou doivent être recréés.
- Recherchez les verrous/interblocages.
- Vérifiez l'utilisation du processeur.
- Consultez le journal des applications pour les messages de mémoire insuffisante.
- Assurez-vous que la base de données tempdb est correctement configurée.
Il peut s'agir de n'importe lequel de ces problèmes logiciels, et ils vous conduisent généralement à la solution consistant à optimiser une requête ou à modifier votre configuration. Ou il peut s'agir d'un problème matériel, et la solution consiste à acheter plus de mémoire ou de puissance de traitement.
Étant donné que les applications de base de données consistent principalement à exécuter de nombreuses requêtes SQL, les problèmes de performances ont de nombreux endroits à cacher dans SQL Server. Si vous êtes un utilisateur, vous pouvez dire :« Oh, eh bien, le problème doit être à l'intérieur de cette boîte noire quelque part. Ce n'est pas mon travail."
Mais en tant que DBA, vous n'avez pas ce luxe. Vous devez ouvrir la boîte noire, monter dedans, trouver le désordre et le réparer.
Profilage des requêtes 101 avec surveillance des performances du serveur SQL
En général, votre objectif avec la surveillance des performances du serveur est de garder un œil sur les performances de vos requêtes SQL au fil du temps et sur la croissance du volume de transactions sur votre serveur SQL. Vous pouvez atteindre cet objectif de plusieurs manières.
Consultez le plan d'explication
Le plan d'explication montre ce que SQL Server fera lors de l'exécution de la requête, y compris les tables qu'il joindra, le type de jointure qu'il effectuera, le nombre de lignes qu'il touchera et les index qu'il utilisera.
Que peut vous dire le plan d'explication ? D'une part, vous pouvez voir comment améliorer la requête elle-même, par exemple en supprimant un NESTED LOOP JOIN que l'un des développeurs de base de données a ajouté sur une table énorme. Ou, vous pouvez comprendre à partir du plan d'explication que vous devez créer ou reconstruire un index pour une certaine table.
Le plan d'explication est un bon point de départ pour le profilage des requêtes, avant même que vous n'exécutiez réellement les requêtes suspectes.
Exécuter la requête
Pour exécuter les requêtes et voir quelles ressources elles affectent au moment de l'exécution, vous devez d'abord créer des traces pour marquer les événements au fur et à mesure qu'ils se produisent. Avec les traces, vous pouvez capturer des données et surveiller l'apparition d'erreurs. Un outil de profilage stocke les données capturées par les traces et les affiche de manière à faciliter la recherche et le dépannage des requêtes problématiques.
La combinaison des traces et de l'outil de profilage peut répondre à de nombreuses questions :
- Quelles requêtes consomment le plus de mémoire ?
- Combien de temps l'exécution de chaque requête prend-elle ?
- Quels verrous SQL Server définit-il pour chaque requête ?
- Quelles requêtes SQL Server peut-il exécuter à partir du cache de tampon ? À quelle fréquence doit-il aller sur le disque ?
- Combien de lignes chaque requête examine-t-elle ?
- Combien de requêtes par minute la base de données traite-t-elle ?
Vous obtiendrez la lecture la plus précise en exécutant la requête sur vos bases de données de production, mais cela peut également ralentir le traitement par vos clients et utilisateurs du monde réel. Si vous le pouvez, testez d'abord sur des instances de développement ou de test où vous n'êtes pas en concurrence pour la mémoire ou les E/S avec votre instance de production.
En parlant de clients et d'utilisateurs, votre objectif dans le profilage des requêtes est de les rendre heureux. Le profilage peut facilement découvrir des dizaines de problèmes dans votre base de données, mais la raison pour laquelle vous avez ouvert la boîte noire est de résoudre les problèmes les plus douloureux. Après avoir capturé les données d'un jour ou deux d'utilisation normale, vous pouvez trouver les problèmes de performances du serveur SQL qui causent le plus de problèmes à vos utilisateurs. Peut-être qu'un index manquant ralentit la récupération des enregistrements, ou qu'un trop grand nombre d'index ralentit l'insertion des enregistrements et les mises à jour de la base de données. Peut-être qu'une requête fréquemment utilisée consiste à collecter des informations dont personne ne se soucie plus.
Utilisez les outils de profilage à bon escient
Les outils de profilage vous évitent le processus fastidieux de configuration manuelle de chaque événement, filtre et appel de procédure pour tout ce que vous souhaitez tracer. Avec tant de choses à l'intérieur de la boîte noire des performances de SQL Server, vous pouvez facilement capturer trop de données pour voir la forêt pour les arbres.
De bons outils vous permettent de sélectionner avec soin ce que vous tracez afin que, par exemple, vous ne capturiez pas des centaines d'événements Lock:Acquired et ne remplissiez pas inutilement votre affichage avec eux. Toutefois, si vous devez examiner un événement fréquent, utilisez des filtres tels que le nom de l'application ou le nom de la table.
Au lieu d'écrire des données de trace dans une table d'une base de données, envisagez de les enregistrer dans son propre fichier séparé. Cela empêche la surcharge de la trace de devenir un fardeau pour SQL Server et de fausser potentiellement les résultats. Si votre outil de profilage privilégie les données extraites d'une table, vous pouvez importer les données du fichier dans la table ultérieurement.
Améliorez la surveillance des performances de votre serveur SQL grâce au profilage des requêtes
Vos utilisateurs restent à l'écart de la boîte noire des performances de SQL Server, mais vous n'y êtes pas obligé. Le profilage des requêtes vous permet d'ouvrir la boîte, de comprendre ce qui se passe à l'intérieur et de commencer le dépannage.
Mais n'attendez pas d'avoir des ennuis pour l'utiliser. Le profilage des requêtes ressemble plus à la vérification de l'huile qu'au remplacement du moteur. Il facilite les tâches habituelles du DBA consistant à mettre à jour les requêtes obsolètes et à modifier la conception afin que vos bases de données suivent le rythme des changements dans l'entreprise.