Examiner l'utilisation élevée du processeur

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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.

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

Google Cloud Console fournit plusieurs outils de surveillance pour Spanner, qui vous permettent de consulter l'état des métriques les plus essentielles de votre instance. L'un d'eux est un graphique appelé Utilisation du processeur - Total. Ce graphique indique l'utilisation totale du processeur, exprimée en pourcentage des ressources de processeur de l'instance, ventilée par priorité de tâche et type d'opération. Il existe deux types de tâches: les tâches utilisateur, telles que les lectures et les écritures, et les tâches système, qui couvrent les tâches automatisées en arrière-plan telles que le compactage et le remplissage d'index.

La Figure 1 illustre le graphique Utilisation du processeur – Total.

Exemple d'utilisation du processeur : graphique total

Figure 1 : Graphique Utilisation du processeur : total dans le tableau de bord Monitoring de Google 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 Google Cloud Console, puis examinez le graphique Utilisation du processeur - Total dans Cloud Console. Comme le montre la Figure 1, vous pouvez voir l'augmentation de l'utilisation du processeur pour les tâches utilisateur à priorité élevée. L'étape suivante consiste à déterminer quelles opérations à priorité élevée entraînent cette augmentation d'utilisation du processeur.

Vous pouvez visualiser cette métrique et d'autres sur une série temporelle à l'aide des tableaux de bord Insights sur les requêtes. Ces tableaux de bord prédéfinis vous aident à visualiser les pics d'utilisation du processeur et à identifier les requêtes inefficaces.

Identifier l'opération qui provoque le pic d'utilisation du processeur

Le graphique Utilisation du processeur – Total de la Figure 1 montre que les tâches à priorité élevée des utilisateurs sont la cause d'une utilisation plus intensive du processeur.

Vous allez ensuite examiner le graphique Utilisation du processeur par type d'opération dans Cloud Console. Ce graphique montre l'utilisation du processeur répartie par opération à priorité élevée, moyenne ou faible, lancée par l'utilisateur.

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. Spanner regroupe ces requêtes en types d'opération ou en catégories, et vous pouvez afficher chaque type d'opération sur une ligne du graphique 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.

Operation 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'instruction "Sélectionner SQL" et les requêtes de flux de modifications.
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.

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 type d'opération

Figure 2. Graphique Utilisation du processeur par type d'opération dans Google Cloud Console.

Vous pouvez limiter l'affichage à une priorité spécifique en utilisant le menu Priorité en haut du graphique. Il représente chaque type ou catégorie d'opération sur un graphique en courbes. Les catégories répertoriées sous le graphique identifient chaque graphique. Vous pouvez masquer ou afficher chaque ligne du graphique en sélectionnant ou en désélectionnant le filtre de catégorie correspondant.

Vous pouvez également créer ce graphique dans l'explorateur de métriques, comme décrit ci-dessous:

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

  1. Dans Google 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.

La métrique Utilisation du processeur par priorité décrite dans la section précédente a permis de déterminer si une tâche utilisateur ou système a entraîné une augmentation de l'utilisation des ressources de processeur. En revanche, la métrique Utilisation du processeur par type d'opération vous permet d'approfondir vos recherches et d'identifier le type d'opération déclenchée par l'utilisateur qui se situe derrière cette augmentation de l'utilisation du processeur.

Identifier la requête de l'utilisateur qui contribue à l'utilisation accrue du processeur

Pour déterminer quelle requête utilisateur spécifique est responsable du pic d'utilisation du processeur dans le graphique de type d'opération runtimesql_select_readonly de la Figure 2, vous allez utiliser les tables intégrées de statistiques d'introspection pour obtenir plus d'insights.

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 Yes Non
read_readwrite Non Yes Yes
read_withpartitiontoken Non Yes Non
executesql_select_readonly Yes Non Non
executesql_select_withpartitiontoken Yes Non Non
executesql_select_readwrite Yes Non Yes
executesql_dml_readwrite Yes Non Yes
executesql_dml_partitioned Non Non Yes
beginorcommit Non Non Yes

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

Dans ce scénario, l'opération executsql_select_readonly semble être la raison de l'augmentation de l'utilisation du processeur que vous observez. En vous basant sur le tableau précédent, vous devez consulter la section Statistiques sur les requêtes pour découvrir quelles requêtes sont coûteuses, s'exécutent fréquemment ou analysent un grand nombre de données.

Pour identifier les requêtes qui ont le plus utilisé le processeur au cours de l'heure précédente, vous pouvez exécuter la requête suivante dans le tableau 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 vous avez identifié la requête qui sollicite le plus le processeur, vous pouvez 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 référence pour le nombre d'exécutions d'une requête par Spanner au cours d'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 plus de ressources de processeur et permet à Spanner de gérer une charge de travail plus importante. Pour en savoir plus, consultez la section Augmenter la capacité de calcul.

Étapes suivantes