Enquêter sur une utilisation élevée du processeur

Cette page explique comment utiliser les métriques et graphiques d'utilisation du processeur, ainsi que d'autres outils d'introspection, pour enquêter sur une utilisation élevée du processeur dans votre base de données.

Identifier si une tâche système ou utilisateur entraîne une utilisation élevée du processeur

Cloud Console fournit plusieurs outils de surveillance pour Cloud Spanner, ce qui vous permet d'afficher l'état des métriques les plus importantes pour votre instance. L'un de ces graphiques est Utilisation du processeur - Priorité élevée. Le graphique montre l'utilisation du processeur liée aux tâches à priorité élevée par rapport à l'utilisation maximale recommandée du processeur pour les instances régionales et multirégionales. Il existe deux types de tâches : les tâches utilisateur, telles que les lectures et les écritures, et les tâches système, telles que le compactage et le remplissage d'un index.

Pour distinguer les types de tâches de ce graphique, procédez comme suit :

  1. Cliquez sur l'icône Plus d'options du graphique sur le graphique.

  2. Sélectionnez Afficher dans l'explorateur de métriques.

  3. Dans l'explorateur de métriques, ajoutez is_system à l'option Grouper par. Le graphique affiche maintenant l'utilisation du processeur répartie par tâche système et tâche utilisateur.

La Figure 1 montre un exemple de graphique d'utilisation du processeur par priorité élevée.

Exemple d'un graphique d'utilisation du processeur par priorité élevée

Figure 1 : Graphique d'Utilisation du processeur par priorité élevée dans le tableau de bord Monitoring de Cloud Console.

Imaginons maintenant que vous receviez une alerte de Cloud Monitoring indiquant que l'utilisation du processeur a considérablement augmenté. Ouvrez le tableau de bord Monitoring de votre instance dans Cloud Console, puis examinez le graphique Utilisation du processeur - Priorité élevée en l'ouvrant dans l'explorateur de métriques. Comme le montre la Figure 1, vous pouvez constater l'augmentation de l'utilisation du processeur par les tâches à priorité élevée et, en regardant la valeur de is_system, vous déterminez que le pic est causé par des tâches utilisateur. L'étape suivante consiste à déterminer quelle opération utilisateur entraîne cette augmentation de l'utilisation du processeur.

Identifier l'opération utilisateur à l'origine du pic d'utilisation du processeur

Le graphique Utilisation du processeur – Priorité élevée dans la Figure 1 nous a montré que les tâches utilisateur à priorité élevée sont la cause d'une utilisation plus élevée du processeur.

Nous allons ensuite examiner la métrique d'utilisation du processeur par type d'opération en créant un graphique à l'aide de l'explorateur de métriques Cloud Monitoring. Ce graphique nosu montre l'utilisation du processeur répartie par opérations initiées par l'utilisateur à priorité élevée.

Qu'est-ce qu'une opération initiée par l'utilisateur ?

Une opération initiée par l'utilisateur est une opération lancée via une requête API. Cloud Spanner regroupe ces requêtes dans des types d'opérations ou des catégories, et nous pouvons afficher chaque type d'opération sous forme de ligne dans le graphique d'utilisation du processeur par type d'opération. Le tableau suivant décrit les méthodes d'API incluses dans chaque type d'opération.

Opération Méthodes d'API Description
read_readonly Read
StreamingRead
Inclut les lectures qui extraient des lignes de la base de données à l'aide de recherches et d'analyses de clés.
read_readwrite Read
StreamingRead
Inclut les lectures dans les transactions en lecture-écriture.
read_withpartitiontoken Read
StreamingRead
Inclut les opérations de lecture effectuées à l'aide d'un ensemble de jetons de partition.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Inclut l'exécution de l'instruction SQL Select.
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
Inclut l'exécution de l'instruction Select dans les transactions en lecture-écriture.
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Inclut l'exécution de l'instruction Select effectuée à l'aide d'un ensemble de jetons de partition.
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Inclut l'exécution de l'instruction SQL en LMD.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Inclut l'exécution de l'instruction SQL en LMD partitionné.
beginorcommit BeginTransaction
Commit
Rollback
Inclut les transactions de début, de commit et de rollback.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
Inclut PartitionQuery, PartitionRead, Create Database, Create Instance, les opérations liées aux sessions, les opérations de diffusion internes urgentes, etc.

Créer un graphique pour l'utilisation du processeur par type d'opération dans l'explorateur de métriques

  1. Dans Cloud Console, sélectionnez Monitoring ou utilisez le bouton suivant :

    Accéder à Monitoring

  2. Sélectionnez Explorateur de métriques dans le volet de navigation.
  3. Dans le champ Rechercher un type de ressource et une métrique, saisissez la valeur spanner.googleapis.com/instance/cpu/utilization_by_operation_type , puis sélectionnez la ligne qui s'affiche en dessous.
  4. Dans le champ Filtre, saisissez la valeur instance_id, puis indiquez l'ID de l'instance à examiner et cliquez sur >Appliquer.
  5. Dans le champ Grouper par, sélectionnez category dans la liste déroulante. Le graphique indique l'utilisation du processeur des tâches utilisateur, regroupées par type d'opération ou par catégorie.

Voici un exemple de graphique illustrant la métrique d'utilisation du processeur par types d'opérations.

Exemple de graphique d'utilisation du processeur par types d'opérations

Figure 2. Graphique d'utilisation du processeur par type d'opération dans l'explorateur de métriques.

Chaque type d'opération, ou catégorie, est représenté sur un graphique linéaire. Le filtre de catégorie situé sous le graphique permet d'identifier chacune des lignes. Vous pouvez masquer ou afficher chaque ligne du graphique en sélectionnant ou en désélectionnant le filtre de catégorie correspondant.

Ainsi, alors que la métrique d'utilisation du processeur par priorité dans la section précédente a permis de déterminer si une tâche utilisateur ou système a causé une augmentation de l'utilisation des ressources de processeur, avec la métrique d'utilisation du processeur par type d'opération, nous pouvons creuser davantage et trouver le type d'opération initiée par l'utilisateur derrière cette augmentation de l'utilisation du processeur.

Identifier quelle requête utilisateur contribue à l'augmentation de l'utilisation du processeur

Pour déterminer quelle requête utilisateur spécifique est responsable du pic d'utilisation du processeur dans le graphique du type d'opération executesql_select_readonly présenté à la Figure 2, nous allons utiliser des tables de statistiques d'introspection intégrées afin d'obtenir plus d'informations.

Utilisez le tableau suivant comme guide pour déterminer la table de statistiques à interroger en fonction du type d'opération qui entraîne une utilisation élevée du processeur.

Type d'opération Requête Lecture Transaction
read_readonly Non Oui Non
read_readwrite Non Oui Oui
read_withpartitiontoken Non Oui Non
executesql_select_readonly Oui Non Non
executesql_select_withpartitiontoken Oui Non Non
executesql_select_readwrite Oui Non Oui
executesql_dml_readwrite Non Non Oui
executesql_dml_partitioned Non Non Oui
beginorcommit Non Non Oui

Par exemple, si le problème vient de read_withpartitiontoken, procédez au dépannage à l'aide des statistiques de lecture.

Dans notre scénario, l'opération executsql_select_readonly semble être la raison de l'augmentation de l'utilisation du processeur observée. Sur la base du tableau précédent, nous devons ensuite examiner les statistiques de requête pour déterminer quelles requêtes sont coûteuses, exécutées fréquemment ou qui analysent beaucoup de données.

Pour connaître les requêtes ayant entraîné le niveau le plus élevé d'utilisation du processeur au cours de l'heure précédente, nous exécutons la requête suivante dans la table de statistiques query_stats_top_hour.

SELECT text,
       execution_count AS count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;

Le résultat affiche les requêtes triées en fonction de l'utilisation du processeur. Une fois que nous avons identifié la requête présentant le niveau le plus élevé d'utilisation du processeur, nous pouvons essayer les options suivantes pour l'ajuster.

  • Examinez le plan d'exécution de requête pour identifier les éventuels processus inefficaces susceptibles d'entraîner une utilisation intensive du processeur.

  • Examinez votre requête pour vous assurer qu'elle respecte les bonnes pratiques SQL pour Cloud Spanner.

  • Examinez la conception du schéma de la base de données et mettez le schéma à jour afin de permettre l'optimisation des requêtes.

  • Établissez une valeur de référence pour le nombre de fois où Cloud Spanner exécute une requête pendant un intervalle. À l'aide de cette référence, vous pourrez détecter et examiner la cause d'écarts inattendus par rapport au comportement normal.

Si vous ne parvenez pas à trouver une requête impliquant une utilisation intensive du processeur, augmentez la capacité de calcul de l'instance. L'ajout de capacité de calcul fournit davantage de ressources de processeur et permet à Cloud Spanner de gérer une charge de travail plus importante. Pour en savoir plus, consultez la section Augmenter la capacité de calcul.

Étape suivante