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 Spanner.
Présentation de Query Insights
Les insights sur les requêtes vous aident à détecter et à diagnostiquer les problèmes de performances des requêtes et des instructions LMD (INSERT
, UPDATE
et DELETE
) pour une base de données Spanner. Il offre un système de surveillance intuitif et fournit des informations de diagnostic qui vous aident à identifier la principale cause des problèmes de performances.
Insights sur les requêtes vous aide à améliorer les performances des requêtes Spanner en suivant les étapes ci-dessous:
- Vérifiez si des requêtes inefficaces sont responsables d'une utilisation élevée du processeur.
- Identifiez une requête ou un tag potentiellement problématique
- Analysez la requête ou le tag de requête pour identifier les problèmes.
Les insights sur les requêtes sont disponibles dans les configurations régionales et multirégionales.
Tarifs
L'utilisation de l'outil Insights sur les requêtes n'entraîne aucun coût supplémentaire.
Conservation des données
La durée de conservation maximale 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 sont extraites des tables SPANNER_SYS.QUERY_STATS_TOP_*
, dont la durée de conservation maximale est 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 de contrôle des accès pré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 accorder les rôles IAM suivants sur l'instance:
-
Lecteur Cloud Spanner (
roles/spanner.viewer
) -
Lecteur de bases de données Cloud Spanner (
roles/spanner.databaseReader
)
Les autorisations suivantes du rôle Lecteur de bases de données Cloud Spanner(
roles/spanner.databaseReader
) sont requises pour afficher la page "Insights sur les requêtes" :
spanner.databases.beginReadOnlyTransaction
spanner.databases.select
spanner.sessions.create
Utilisateur du contrôle précis des accès
Si vous utilisez le contrôle précis des accès, assurez-vous de:
- disposer du Lecteur Cloud Spanner(
roles/spanner.viewer
) ; - disposent de droits de contrôle des accès ultrapré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 "Vue d'ensemble de la base de données".
Pour en savoir plus, consultez les pages À propos du contrôle des accès précis et Rôles système de contrôle des accès précis.
Tableau de bord d'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 la requête correspond au calcul 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 des requêtes.
Pour afficher le tableau de bord "Insights sur les requêtes" d'une base de données, procédez comme suit:
- Sélectionnez Insights sur les requêtes dans le panneau de navigation de gauche. Le tableau de bord d'Insights sur les requêtes s'ouvre.
- Sélectionnez une base de données dans la liste Bases de données. Le tableau de bord affiche les informations sur la charge de requêtes pour la base de données.
Le tableau de bord comprend les sections suivantes :
- Liste des bases de données: permet de filtrer la charge des requêtes sur une base de données spécifique ou sur toutes les bases de données.
- Filtre de période: permet de filtrer la charge des requêtes par période, par exemple par heure, par jour ou selon une plage personnalisée.
- Graphique "Utilisation totale du processeur (toutes les requêtes)": affiche la charge agrégée de toutes les requêtes.
- Graphique "Utilisation totale du processeur (par requête ou tag de requête)": affiche l'utilisation du processeur par requête ou tag de requête.
- Tableau des requêtes et tags TopN: affiche la liste des requêtes et des tags de requête les plus fréquents, triés en fonction de l'utilisation du processeur. Consultez la section Identifier une requête ou un tag potentiellement problématique.
Performances du tableau de bord
Utilisez des paramètres de requête ou taguez vos requêtes pour optimiser les performances de Query Insights. Si vous ne paramétrez pas ni ne taguez pas vos requêtes, vous risquez de renvoyer trop de résultats, ce qui peut entraîner un chargement incorrect de la table des requêtes et des tags TopN.
Vérifier si des requêtes inefficaces sont responsables d'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.
Examinez le graphique pour répondre aux 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 avec les charges les plus élevées. Pour savoir quelle base de données a la charge la plus élevée, vous pouvez également consulter le graphique Utilisation du processeur (total) pour les bases de données dans la consoleGoogle Cloud .
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 d'utilisation élevée du processeur, le problème ne concerne pas vos requêtes.
Depuis combien de temps l'utilisation du processeur est-elle élevée ? A-t-elle connu un pic récemment ou est-elle systématiquement élevée 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. Effectuez un zoom avant pour afficher une période pendant laquelle les pics de charge de requêtes sont observés. Effectuez un zoom arrière pour afficher jusqu'à une semaine de la chronologie.
Si vous constatez un pic ou une augmentation dans le graphique 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 processus de débogage en identifiant une requête ou une balise de requête potentiellement problématique.
Identifier une requête ou un tag de requête potentiellement problématique
Pour identifier une requête ou un tag de requête potentiellement problématique, examinez la section "Requêtes TopN" :
Ici, nous constatons que la requête avec FPRINT 6815864236081503267
présente une utilisation élevée du processeur et peut poser problème.
Le tableau Requêtes TopN fournit un aperçu des requêtes qui utilisent le plus de CPU au cours de la période choisie, triées de la plus élevée à la plus faible. Le nombre de requêtes TopN est limité à 100.
Pour les graphiques, nous extrayons les données de la table des statistiques des requêtes TopN, qui comporte trois niveaux de granularité 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 liés à des constructions de niveau supérieur, tels que la logique métier ou un microservice.
Le tableau affiche les propriétés suivantes :
- FPRINT: hachage de la balise de requête, le cas échéant. Dans le cas contraire, hachage de la requête.
Tag de requête ou de requête: si une balise est associée à la requête, le tag de requête s'affiche. Les statistiques de plusieurs requêtes ayant la même chaîne de tag 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 page Résoudre les problèmes liés aux tags de requête et aux tags de transaction.Si aucune balise n'est associée à la requête, la requête SQL, tronquée à environ 64 Ko, s'affiche. Pour le traitement LMD par lots, les instructions SQL sont aplaties sur 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 une
PARTITIONED_QUERY
ou uneQUERY
. UnPARTITIONED_QUERY
est une requête avec unpartitionToken
obtenu à partir de l'API PartitionQuery. Toutes les autres requêtes et instructions LMD sont désignées par le type de requêteQUERY
.Utilisation du processeur: consommation de ressources de processeur par une requête, exprimée en pourcentage du total des 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, affichée sur une barre horizontale allant de 0 à 100.
CPU (%): consommation de ressources de processeur par une requête, exprimée en pourcentage du total des 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 au cours de l'intervalle.
Latence moyenne (ms): durée moyenne, en microsecondes, de chaque exécution de requête dans la base de données. à l'exclusion du temps d'encodage et de transmission de l'ensemble de résultats ainsi que de la surcharge
Lignes analysées en moyenne: nombre moyen de lignes analysées par la requête, à l'exclusion des valeurs supprimées.
Lignes renvoyées en moyenne: 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.
Différences possibles entre les graphiques
Vous remarquerez peut-être une certaine variance 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 de surveillance dans le cloud, qui alimentent le graphique "Utilisation totale du processeur (toutes les requêtes)", sont généralement plus précises, car elles sont transmises toutes les minutes et ont une durée de conservation de 45 jours. D'autre part, 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 calculées sur une moyenne de 10 minutes (ou 1 heure). Dans ce cas, nous pouvons perdre des données à haute granularité que nous voyons dans le graphique "Utilisation totale du processeur (toutes les requêtes)".
Différentes périodes d'agrégation: les deux graphiques ont des périodes d'agrégation différentes. Par exemple, lorsque vous inspectez un événement datant de plus de six heures, vous interrogez la table
SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE
. Dans ce cas, un événement qui se produit à 10h01 sera agrégé sur 10 minutes et figurera dans le tableau système correspondant au code temporel 10:10.
La capture d'écran suivante en est un exemple :
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 du problème, cliquez sur la requête ou le tag de requête qui semble avoir la charge 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 des requêtes sur la chronologie pour connaître leur utilisation du processeur (en secondes).
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é à s'exécuter de manière inefficace.
- 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 le rapport avec les autres requêtes ? Examinez le tableau et comparez les données des autres requêtes à celles de la requête sélectionnée. Existe-t-il une différence majeure ?
Pour confirmer que la requête sélectionnée contribue à l'utilisation élevée du processeur, vous pouvez examiner les détails de la forme de requête (ou de la balise de requête) spécifique 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'une balise de requête spécifique sous forme graphique, cliquez sur la FPRINT associée à la requête ou à la balise de requête. La page "Détails de la requête" s'ouvre.
La page "Détails de la requête" affiche les informations suivantes:
- 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 avec le REQUEST_TAG correspondant à cette chaîne de tag. Seul le texte de l'une de ces requêtes est affiché dans ce champ. Pour le traitement LMD par lots, l'ensemble d'instructions SQL est aplati en une seule ligne, concatenaté à l'aide d'un séparateur de virgule. Les textes SQL identiques consécutifs sont dédupliqués avant d'être tronqués.
- Les valeurs des champs suivants :
- Nombre d'exécutions: nombre de fois où Spanner a vu la requête au cours de l'intervalle.
- CPU moyen (ms): consommation moyenne des ressources de processeur, en millisecondes, par une requête des ressources de processeur de l'instance sur une période donnée.
- Latence moyenne (ms): durée moyenne, en millisecondes, de chaque exécution de la requête dans la base de données. à l'exclusion du temps d'encodage et de transmission de l'ensemble de résultats ainsi que de la surcharge
- Lignes renvoyées en moyenne: nombre moyen de lignes renvoyées par la requête.
- Lignes analysées en moyenne: nombre moyen de lignes analysées par la requête, à l'exclusion des valeurs supprimées.
- Octets moyens: nombre d'octets de données renvoyés par la requête, à l'exclusion de la surcharge liée à l'encodage de la transmission.
- Graphique des exemples de plans de requête: chaque point du graphique représente un plan de requête échantillonné à un moment donné et sa latence de 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êtes ne sont pas acceptés pour les requêtes avec des partitionTokens obtenus à partir de l'API PartitionQuery et des requêtes LMD partitionné.
- Outil de visualisation du plan de requête: affiche le plan de requête échantillonné sélectionné. Chaque nœud, ou fiche, du graphique représente un itérateur qui consomme les lignes de ses entrées et produit des lignes vers son parent. Vous pouvez cliquer sur chaque itérateur pour afficher des informations détaillées.
- Graphique de latence des requêtes: indique la valeur de latence des requêtes pour une requête sélectionnée sur une période donnée. Il affiche également la latence moyenne.
- Graphique d'utilisation du processeur: affiche l'utilisation du processeur par requête, en pourcentage, sur une période donnée. Il indique également l'utilisation moyenne du processeur.
- Nombre d'exécutions/Graphique des échecs: indique le nombre d'exécutions d'une requête sur une période donnée et le nombre de fois où l'exécution de la requête a échoué.
- Graphique des lignes analysées: indique le nombre de lignes analysées par la requête sur une période donnée.
- Graphique des lignes renvoyées: indique le nombre de lignes renvoyées par la requête sur une période donnée.
- Filtre de période: permet de filtrer les détails des requêtes par période, par exemple par heure, par jour ou par plage personnalisée.
Pour les graphiques, nous extrayons les données de la table des statistiques des requêtes TopN, qui comporte trois niveaux de granularité 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.
Rechercher toutes les exécutions d'une requête dans le journal d'audit
Pour rechercher toutes les exécutions d'une empreinte de requête spécifique dans les journaux d'audit Cloud, interrogez le journal d'audit et recherchez tous les query_fingerprint
correspondant au champ FPRINT
dans le tableau des statistiques des requêtes TopN. Pour en savoir plus, consultez la section Présentation de l'interrogation et de l'affichage des journaux. Utilisez cette méthode pour identifier l'utilisateur à l'origine de la requête.