Analyser les performances des requêtes

Cette page explique comment utiliser le tableau de bord d'Insights sur les requêtes pour détecter et analyser les problèmes de performances.

Présentation des insights sur les requêtes

Les insights sur les requêtes vous permettent de détecter et de diagnostiquer les problèmes de performances des requêtes et des instruction LMD pour une base de données Spanner. Il offre une surveillance intuitive et fournit des informations de diagnostic qui vous aident à aller au-delà de la détection pour identifier l'origine des problèmes de performances.

Les insights sur les requêtes vous aident à améliorer les performances des requêtes Spanner en vous guidant dans les étapes suivantes:

  1. Vérifiez si des requêtes inefficaces entraînent une utilisation élevée du processeur.
  2. Identifiez une requête ou un tag potentiellement problématique
  3. Analysez la requête ou le tag de demande pour identifier les problèmes.

Les insights sur les requêtes sont disponibles à la fois dans les configurations régionales et multirégionales.

Tarification

L'utilisation des insights sur les requêtes n'entraîne aucuns frais supplémentaires.

Conservation des données

La durée maximale de conservation des données pour les insights sur les requêtes est de 30 jours. Pour le graphique Utilisation totale du processeur (par requête ou tag de requête), les données proviennent des tables SPANNER_SYS.QUERY_STATS_TOP_*, qui ont une durée de conservation maximale de 30 jours. Pour en savoir plus, consultez la section Conservation des données.

Rôles requis

Vous avez besoin de rôles et d'autorisations IAM différents selon que vous êtes un utilisateur IAM ou un utilisateur utilisant le contrôle des accès ultraprécis.

Utilisateur IAM (Identity and Access Management)

Pour obtenir les autorisations nécessaires pour afficher la page "Insights sur les requêtes", demandez à votre administrateur de vous attribuer les rôles IAM suivants sur l'instance:

Vous devez disposer des autorisations suivantes du rôle Lecteur de bases de données Cloud Spanner (roles/spanner.databaseReader) pour afficher la page "Insights sur les requêtes" :

  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.select
  • spanner.sessions.create

Utilisateur pour le contrôle ultraprécis des accès

Si vous êtes un utilisateur du contrôle des accès ultraprécis, assurez-vous de respecter les points suivants:

  • Vous disposez du lecteur Cloud Spanner(roles/spanner.viewer).
  • Ils disposent de droits de contrôle des accès précis et se voient attribuer le rôle système spanner_sys_reader ou l'un de ses rôles de membre.
  • Sélectionnez spanner_sys_reader ou un rôle de membre comme rôle système actuel sur la page de présentation de la base de données.

Pour en savoir plus, consultez les pages À propos du contrôle ultraprécis des accès et Rôles système de contrôle des accès précis.

Le tableau de bord "Insights sur les requêtes"

Le tableau de bord "Insights sur les requêtes" affiche la charge de la requête en fonction de la base de données et de la période que vous sélectionnez. La charge des requêtes est une mesure de l'utilisation totale du processeur pour toutes les requêtes de l'instance au cours de la période sélectionnée. Le tableau de bord fournit une série de filtres qui vous aident à visualiser le chargement des requêtes.

Pour afficher le tableau de bord "Insights sur les requêtes" pour une base de données, procédez comme suit:

  1. Sélectionnez Insights sur les requêtes dans le panneau de navigation de gauche. Le tableau de bord des insights sur les requêtes s'ouvre.
  2. Sélectionnez une base de données dans la liste Bases de données. Le tableau de bord affiche les informations de chargement de la requête pour la base de données.

Le tableau de bord comprend les sections suivantes :

  1. Databases list (Liste de bases de données) : filtre la charge de la requête sur une base de données spécifique ou sur toutes les bases de données.
  2. Filtre de période: filtre la requête de chargement selon des périodes, telles que des heures, des jours ou une période personnalisée.
  3. Graphique d'utilisation totale du processeur (toutes les requêtes): affiche la charge agrégée de toutes les requêtes.
  4. Graphique d'utilisation totale du processeur (par requête ou tag de requête): affiche l'utilisation du processeur par chaque requête ou tag de requête.
  5. Table des requêtes et tags TopN: affiche la liste des requêtes et des tags de requête les plus fréquents, triés par utilisation du processeur. Consultez Identifier une requête ou un tag potentiellement problématique.

Tableau de bord des insights sur les requêtes

Performances du tableau de bord

Utilisez les paramètres de requête ou ajoutez des tags à vos requêtes pour optimiser les performances des insights sur les requêtes. Si vous ne définissez pas de paramètres ni de tags pour vos requêtes, un trop grand nombre de résultats peut être renvoyé, ce qui peut empêcher le chargement correct de la table des requêtes et des tags TopN.

Vérifier si des requêtes inefficaces entraînent une utilisation élevée du processeur

L'utilisation totale du processeur est une mesure du travail (en secondes de processeur) effectué par les requêtes exécutées dans la base de données sélectionnée au fil du temps.

Utilisation totale du processeur pour toutes les requêtes

Examinez le graphique pour examiner les questions suivantes:

  • Quelle base de données subit la charge ? Sélectionnez différentes bases de données dans la liste "Bases de données" pour trouver celles ayant les charges les plus élevées. Pour savoir quelle base de données présente la charge la plus élevée, vous pouvez également consulter le graphique Utilisation du processeur – Total pour les bases de données dans la console Google Cloud.

    Charge de la base de données

  • L'utilisation du processeur est-elle élevée ? Le graphique a-t-il connu un pic ou augmenté au fil du temps ? Si vous n'observez pas une utilisation élevée du processeur, le problème ne vient pas de vos requêtes.

  • Depuis combien de temps l'utilisation du processeur est-elle élevée ? A-t-il grimpé en flèche récemment ou a-t-il été constamment élevé depuis un certain temps ? Utilisez le sélecteur de plage pour sélectionner différentes périodes afin de déterminer la durée du problème. Faites un zoom avant pour afficher une fenêtre temporelle pendant laquelle les pics de charge des requêtes sont observés. Effectuez un zoom arrière pour afficher jusqu'à une semaine de la chronologie.

Si vous constatez sur le graphique un pic ou une élévation correspondant à l'utilisation globale du processeur de l'instance, cela est probablement dû à une ou plusieurs requêtes coûteuses. Vous pouvez ensuite approfondir le parcours de débogage en identifiant une requête ou un tag de requête potentiellement problématique.

Identifier une requête ou un tag de demande potentiellement problématique

Pour identifier une requête ou un tag de demande potentiellement problématique, reportez-vous à la section consacrée aux requêtes TopN:

Requêtes TopN

Nous voyons ici que la requête avec FPRINT 6815864236081503267 utilise beaucoup le processeur et peut poser problème.

Le tableau Requêtes TopN fournit un aperçu des requêtes qui utilisent le plus le processeur au cours de la période choisie, triées par ordre décroissant. Le nombre de requêtes TopN est limité à 100.

Pour les graphiques, nous récupérons les données du tableau de statistiques des requêtes TopN, qui comporte trois niveaux de précision différents: 1 min, 10 min et 1 heure. La valeur de chaque point de données dans les graphiques représente la valeur moyenne sur un intervalle d'une minute.

Nous vous recommandons d'ajouter des balises à vos requêtes SQL. L'ajout de tags aux requêtes vous aide à détecter les problèmes à des niveaux supérieurs, par exemple avec la logique métier ou un microservice.

Table des requêtes TopN

Le tableau affiche les propriétés suivantes :

  • FPRINT: hachage de la balise de requête, le cas échéant, ou hachage de la requête.
  • Requête ou tag de requête: si un tag est associé à la requête, ce tag s'affiche. Les statistiques de plusieurs requêtes ayant la même chaîne de tag sont regroupées sur une seule ligne, la valeur REQUEST_TAG correspondant à la chaîne de tag. Pour en savoir plus sur l'utilisation des tags de requête, consultez la page Résoudre les problèmes liés aux tags de requête et aux tags de transaction.

    Si la requête n'est associée à aucune balise, la requête SQL, tronquée à environ 64 Ko, s'affiche. Pour les instructions LMD par lot, les instructions SQL sont aplaties en une seule ligne et concaténées à l'aide d'un délimiteur de point-virgule. Les textes SQL identiques consécutifs sont dédupliqués avant d'être tronqués.

  • Type de requête: indique si une requête est de type PARTITIONED_QUERY ou QUERY. Un PARTITIONED_QUERY est une requête avec un partitionToken obtenu à partir de l'API PartitionQuery. Toutes les autres requêtes et instructions LMD sont désignées par le type de requête QUERY.

  • Utilisation du processeur: consommation des ressources du processeur par une requête, exprimée en pourcentage des ressources totales de processeur utilisées par toutes les requêtes exécutées sur les bases de données au cours de cet intervalle de temps, indiquée sur une barre horizontale allant de 0 à 100.

  • Processeur (%): consommation des ressources de processeur par une requête, exprimée en pourcentage des ressources totales de processeur utilisées par toutes les requêtes exécutées sur les bases de données au cours de cet intervalle de temps.

  • Nombre d'exécutions: nombre de fois où Spanner a vu la requête au cours de l'intervalle.

  • Latence moyenne (ms): durée moyenne, en microsecondes, pour chaque exécution de requête dans la base de données. Cette moyenne exclut le temps d'encodage et de transmission de l'ensemble de résultats, ainsi que la surcharge.

  • Nombre moyen de lignes analysées: nombre moyen de lignes analysées par la requête, à l'exclusion des valeurs supprimées.

  • Nombre moyen de lignes renvoyées: nombre moyen de lignes renvoyées par la requête.

  • Octets renvoyés: nombre d'octets de données renvoyés par la requête, à l'exclusion de la surcharge liée à l'encodage de la transmission.

Écart possible entre les graphiques

Vous remarquerez peut-être une différence entre le graphique Utilisation totale du processeur (toutes les requêtes) et le graphique Utilisation totale du processeur (par requête ou tag de requête). Deux éléments peuvent entraîner ce scénario:

  • Différentes sources de données: les données Cloud Monitoring, qui alimentent le graphique d'utilisation totale du processeur (toutes les requêtes), sont généralement plus précises, car elles sont transmises chaque minute et ont une durée de conservation de 45 jours. En revanche, la moyenne des données de la table système, qui alimente le graphique d'utilisation totale du processeur (par requête ou tag de requête) peut être calculée sur 10 minutes (ou 1 heure). Dans ce cas, nous pouvons perdre les données à haute précision que nous voyons dans le graphique "Utilisation totale du processeur (toutes les requêtes)".

  • Différentes fenêtres d'agrégation: les deux graphiques ont des fenêtres d'agrégation différentes. Par exemple, lorsque vous inspectez un événement de plus de six heures, nous pouvons interroger la table SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. Dans ce cas, un événement qui se produit à 10h01 est agrégé sur 10 minutes et est présent dans la table système correspondant à l'horodatage de 10h10.

La capture d'écran suivante en montre un exemple.

Variance entre les graphiques

Analyser une requête ou un tag de requête spécifique

Pour déterminer si une requête ou un tag de requête est la cause première du problème, cliquez sur le tag de requête ou de requête qui semble présenter la charge la plus élevée ou qui prend plus de temps que les autres. Vous pouvez sélectionner plusieurs requêtes et demander des tags à la fois.

Vous pouvez maintenir le pointeur de la souris sur le graphique pour connaître l'utilisation du processeur (en secondes) des requêtes de la chronologie.

Essayez de préciser le problème en examinant les éléments suivants :

  • Depuis combien de temps la charge est-elle élevée ? Est-elle élevée uniquement maintenant ? Ou est-elle élevée depuis longtemps ? Modifiez les périodes pour trouver la date et l'heure auxquelles la requête a commencé à ne pas fonctionner correctement.
  • Y a-t-il eu des pics d'utilisation du processeur ? Vous pouvez modifier la période pour étudier l'historique d'utilisation du processeur pour la requête.
  • Quelle est la consommation des ressources ? Quel est son rapport avec d'autres requêtes ? Examinez le tableau et comparez les données d'autres requêtes avec celles de la requête sélectionnée. Y a-t-il une différence majeure ?

Pour vérifier que la requête sélectionnée contribue à l'utilisation intensive du processeur, vous pouvez afficher le détail de la forme de requête spécifique (ou du tag de requête) et l'analyser plus en détail sur la page "Détails de la requête".

Afficher la page "Détails de la requête"

Pour afficher les détails d'une forme de requête ou d'un tag de requête spécifique sous forme graphique, cliquez sur le FPRINT associé à la requête ou au tag de requête. La page "Détails de la requête" s'ouvre.

Page "Détails de la requête"

La page "Détails de la requête" affiche les informations suivantes:

  1. Texte des détails de la requête: texte de la requête SQL, tronqué à environ 64 Ko. Les statistiques de plusieurs requêtes contenant la même chaîne de tag sont regroupées sur une seule ligne, la requête REQUEST_TAG correspondant à cette chaîne de tag. Seul le texte de l'une de ces requêtes s'affiche dans ce champ. Pour le LMD par lot, l'ensemble d'instructions SQL est aplati en une seule ligne, concaténée à l'aide d'un délimiteur de point-virgule. Les textes SQL identiques consécutifs sont dédupliqués avant d'être tronqués.
  2. Les valeurs des champs suivants :
    • Nombre d'exécutions: nombre de fois où Spanner a vu la requête pendant l'intervalle.
    • Utilisation moyenne du processeur (ms): consommation moyenne des ressources de processeur, en millisecondes, par une requête portant sur les ressources de processeur de l'instance sur un intervalle de temps.
    • Latence moyenne (ms): durée moyenne, en millisecondes, pour chaque exécution de requête dans la base de données. Cette moyenne exclut le temps d'encodage et de transmission de l'ensemble de résultats et de la surcharge.
    • Nombre moy. de lignes renvoyées: nombre moyen de lignes renvoyées par la requête.
    • Nombre moy. de lignes analysées: nombre moyen de lignes analysées par la requête, à l'exclusion des valeurs supprimées.
    • Octets moy.: nombre d'octets de données renvoyés par la requête, à l'exclusion de la surcharge liée à l'encodage de la transmission.
  3. Graphique d'exemples de plans de requêtes: chaque point du graphique représente un échantillon de plan de requête à un moment précis et sa latence de requête spécifique. Cliquez sur l'un des points du graphique pour afficher le plan de requête et les étapes effectuées lors de l'exécution de la requête. Remarque: Les plans de requête ne sont pas compatibles avec les requêtes utilisant des partitionsTokens, obtenues à partir de l'API PartitionQuery et des requêtes en LMD partitionné.
  4. Outil de visualisation du plan de requête: affiche le plan de requête échantillonné sélectionné. Sur le graphique, chaque nœud ou carte représente un itérateur qui consomme des lignes à partir de ses entrées et génère des lignes pour son parent. Vous pouvez cliquer sur chaque itérateur pour afficher des informations détaillées.
  5. Graphique de latence des requêtes: indique la valeur de latence d'une requête sélectionnée sur une période donnée. Elle indique également la latence moyenne.
  6. Graphique d'utilisation du processeur: indique l'utilisation du processeur par une requête, en pourcentage, sur une période donnée. Il indique également l'utilisation moyenne du processeur.
  7. Graphique du nombre d'exécutions/Échecs: affiche le nombre d'exécutions d'une requête sur une période donnée et le nombre d'échecs d'exécution de la requête.
  8. Graphique des lignes analysées: indique le nombre de lignes analysées par la requête au cours d'une période donnée.
  9. Graphique des lignes renvoyées: indique le nombre de lignes renvoyées par la requête sur une période donnée.
  10. Filtre de période: filtre les détails de la requête par période, telle que l'heure, le jour ou une période personnalisée.

Pour les graphiques, nous récupérons les données de la table de statistiques des requêtes TopN, qui comporte trois niveaux de précision différents: 1 min, 10 min et 1 heure. La valeur de chaque point de données dans les graphiques représente la valeur moyenne sur un intervalle d'une minute.