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. Elle permet une surveillance intuitive et fournit des informations de diagnostic qui vous aident à aller au-delà de la détection pour identifier la cause racine des problèmes de performances.

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

  1. Vérifiez si les requêtes inefficaces sont à l'origine d'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 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 conservation maximale de 30 jours. Pour en savoir plus, consultez la section Conservation des données.

Rôles requis

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

Utilisateur Identity and Access Management (IAM)

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 dans le rôle Lecteur de base 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 avec contrôle des accès ultraprécis

Si vous êtes un utilisateur disposant d'un contrôle des accès ultraprécis, veillez à:

  • Le lecteur Cloud Spanner(roles/spanner.viewer)
  • Ils doivent disposer de droits de contrôle des accès ultraprécis, ainsi que du rôle système spanner_sys_reader ou de l'un de ses rôles de membre.
  • Sélectionnez le rôle 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 sections À propos du contrôle ultraprécis des accès et Rôles précis du système de contrôle des accès.

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 sélectionnées. La charge de requête 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 à afficher la charge de requête.

Pour afficher le tableau de bord "Insights sur les requêtes" d'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 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 requête sur une base de données spécifique ou sur toutes les bases de données.
  2. Time range filter (Filtre de période) : filtre le chargement de la requête par périodes (heures, jours ou plage personnalisée, par exemple).
  3. Graphique "Utilisation totale du processeur (toutes les requêtes)": affiche la charge agrégée de toutes les requêtes.
  4. Graphique "Utilisation totale du processeur (par requête ou tag de requête): affiche l'utilisation totale du processeur par requête ou tag de requête.
  5. Table des requêtes et tags principaux: affiche la liste des requêtes et tags de requête les plus courants, triés en fonction de l'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 des 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 ni ne taguez vos requêtes, trop de résultats risquent d'être renvoyés, ce qui peut empêcher le chargement correct de la table des requêtes et tags TopN.

Vérifier si les requêtes inefficaces sont à l'origine d'une utilisation élevée du processeur

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

Utilisation totale du processeur pour toutes les requêtes

Examinez le graphique pour examiner ces questions:

  • Quelle base de données subit la charge ? Sélectionnez différentes bases de données dans la liste pour trouver celles qui présentent 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 ne constatez 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 connu un pic récemment ou a-t-il été élevé de façon constante 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 durant 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 observez un pic ou une élévation dans le graphique correspondant à l'utilisation globale du processeur de l'instance, cela est très 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 demande 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, consultez la section "Requêtes TopN" :

Requêtes TopN

Nous voyons ici que la requête avec FPRINT 6815864236081503267 utilise une forte utilisation du processeur et peut poser problème.

Le tableau des requêtes principales fournit un aperçu des requêtes qui utilisent le plus le processeur au cours de la période choisie, en les triant 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 des statistiques de requête TopN, qui présente trois niveaux de précision différents: 1 minute, 10 minutes et 1 heure. La valeur de chaque point de données des graphiques représente la valeur moyenne sur un intervalle d'une minute.

Nous vous recommandons d'ajouter des tags à vos requêtes SQL. L'ajout de tags aux requêtes vous aide à détecter les problèmes au niveau des constructions de niveau supérieur, 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. Sinon, hachage de la requête.
  • Requête ou tag de requête: si la requête est associée à un tag, le tag de requête s'affiche. Les statistiques de plusieurs requêtes ayant la même chaîne de balise sont regroupées sur une seule ligne, avec la valeur REQUEST_TAG correspondant à la chaîne de tag. Pour en savoir plus sur l'utilisation des tags de requête, consultez la section Dépannage à l'aide de tags de requête et de tags de transaction.

    Si la requête n'est associée à aucun tag, la requête SQL, tronquée à environ 64 Ko, est affichée. Pour le 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 de processeur par une requête, exprimée en pourcentage des ressources de processeur totales 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 dans une plage de 0 à 100.

  • Processeur (%): consommation des ressources de processeur par une requête, exprimée en pourcentage de la quantité totale de ressources 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 pendant 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 pour 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'exception 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, hors surcharge liée à l'encodage de la transmission.

Variance 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 choses peuvent entraîner ce scénario:

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

  • Fenêtres d'agrégation différentes: les deux graphiques ont des périodes d'agrégation différentes. Par exemple, lors de l'inspection d'un événement de plus de 6 heures, nous interrogeons la table SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. Dans ce cas, un événement qui se produit à 10h01 est agrégé sur une période de 10 minutes et est présent dans la table système correspondant à l'horodatage 10h10.

La capture d'écran suivante montre un exemple de cette variance.

Variance entre des graphiques

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

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

Vous pouvez maintenir le pointeur de la souris sur le graphique pour connaître l'utilisation du processeur (en secondes) au cours 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 plages horaires pour identifier la date et l'heure auxquelles la requête a commencé à présenter des performances médiocres.
  • Y a-t-il eu des pics d'utilisation du processeur ? Vous pouvez modifier cette période pour étudier l'historique d'utilisation du processeur pour la requête.
  • Quelle est la consommation de ressources ? Quel est son rapport avec les autres requêtes ? Examinez le tableau et comparez les données des 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 à une utilisation intensive du processeur, vous pouvez afficher le détail de la forme de requête (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 ayant la même chaîne de tag sont regroupées sur une seule ligne, le 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é à l'aide d'un 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.
    • CPU moy. (ms): consommation moyenne des ressources de processeur de l'instance, en millisecondes, par une requête des ressources de processeur de l'instance pendant un intervalle de temps donné.
    • 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, ainsi que la surcharge.
    • Nombre moyen de lignes renvoyées: nombre moyen de lignes renvoyées par la requête.
    • Nombre moyen de lignes analysées: nombre moyen de lignes analysées par la requête, à l'exception des valeurs supprimées.
    • Moy. octets: nombre d'octets de données renvoyés par la requête, hors surcharge liée à l'encodage de la transmission.
  3. Graphique d'exemples de plans de requête: chaque point du graphique représente un échantillon de plan de requête à un moment précis et à la latence de sa requête spécifique. Cliquez sur l'un des points du graphique pour afficher le plan de requête et visualiser 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 avec des jetons partitionTokens obtenus à partir de l'API PartitionQuery et des requêtes en LMD partitionné.
  4. Visualiseur du plan de requête: affiche le plan de requête échantillonné sélectionné. Chaque nœud (ou carte) du graphique représente un itérateur qui consomme des lignes à partir de ses entrées et en génère des lignes vers son parent. Cliquez sur chaque itérateur pour en savoir plus.
  5. Graphique de latence des requêtes: affiche la valeur de la latence d'une requête sélectionnée sur une période donnée. Il indique également la latence moyenne.
  6. Graphique "Utilisation du processeur": affiche 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/d'échecs: affiche le nombre d'exécutions d'une requête sur une période donnée et le nombre de fois où son exécution a échoué.
  8. Graphique des lignes analysées: affiche le nombre de lignes analysées par la requête sur 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 (par exemple, heure, jour ou plage personnalisée).

Pour les graphiques, nous récupérons les données du tableau des statistiques de requête TopN, qui comporte trois niveaux de précision différents: 1 minute, 10 minutes 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.