Comment résoudre un problème d'utilisation élevée du CPU sur ma base de données Amazon RDS for Oracle ?

Date de la dernière mise à jour : 29/10/2021

Je constate une utilisation élevée du CPU sur mon instance de base de données Amazon Relational Database Service (Amazon RDS) for Oracle.

Brève description

Si votre base de données RDS for Oracle présente une utilisation élevée du CPU, utilisez une combinaison des outils suivants pour identifier la cause :

  • Métriques Amazon CloudWatch
  • Métriques Enhanced Monitoring (Surveillance améliorée)
  • Métriques Performance Insights
  • Oracle Statspack
  • Automatic Workload Repository (AWR)
  • Automatic Database Diagnostic Monitor (ADDM)
  • Active Session History (ASH)
  • Oracle SQLT

Solution

Lorsque vous diagnostiquez des problèmes liés à une utilisation élevée du CPU, identifiez la période au cours de laquelle le problème s'est produit.

Métriques CloudWatch

Amazon RDS envoie des métriques à CloudWatch toutes les minutes pour chaque base de données active. Examinez les métriques CloudWatch suivantes pour Amazon RDS afin d'identifier les schémas d'utilisation du CPU sur des périodes prolongées :

  • CPUUtilization
  • CPUCreditUsage, si vous utilisez une instance T2 ou T3
  • CPUCreditBalance, si vous utilisez une instance T2 ou T3

Examinez également les métriques suivantes pour vérifier s'il y a eu un changement dans l'application et si des seuils ont été franchis. Ces facteurs peuvent contribuer au pic d'utilisation du CPU.

  • DatabaseConnections
  • DiskQueueDepth
  • FreeableMemory
  • ReadIOPS
  • ReadLatency
  • WriteIOPS
  • WriteLatency

Pour plus d'informations, consultez Métriques d'Amazon RDS et Affichage des métriques de l'instance de base de données.

Métriques Enhanced Monitoring (Surveillance améliorée)

La surveillance améliorée fournit des métriques en temps réel pour le système d'exploitation sur lequel votre instance de base de données est exécutée. Alors que CloudWatch obtient les métriques d'utilisation du CPU de l'hyperviseur, la surveillance avancée obtient ces métriques d'un agent sur l'instance de base de données. Les métriques de la surveillance améliorée sont plus détaillées que celles de CloudWatch. Les métriques de surveillance améliorée sont stockées pendant 30 jours dans CloudWatch Logs.

Vous pouvez définir l'intervalle de collecte pour les métriques de 1 seconde à 1 minute. Une bonne pratique consiste à définir la granularité à 1 seconde ou 5 secondes pour les applications critiques pour l'entreprise. Avec cette granularité, les métriques fournissent des informations plus précises sur la charge de l'application pour analyser les problèmes de performance.

Pour afficher la période de temps du pic d'utilisation du CPU, procédez comme suit :
  1. Ouvrez la console Amazon RDS.
  2. Sélectionnez Databases (Bases de données) dans le panneau de navigation.
  3. Sélectionnez la base de données que vous souhaitez surveiller.
  4. Sélectionnez l'onglet Monitoring (Surveillance).
  5. Sélectionnez Enhanced monitoring (Surveillance améliorée) dans la liste déroulante Monitoring (Surveillance).
  6. Sous la vue Enhanced Monitoring (Surveillance améliorée), si l'instance est un déploiement Multi-AZ, sélectionnez primary (principal) pour afficher les métriques du système d'exploitation de l'instance principale. Sélectionnez secondaire pour afficher les métriques du réplica en attente.
  7. Sélectionnez la date et l'heure de début.
  8. Dans le coin droit, sélectionnez la durée. Vous pouvez sélectionner 5 minutes, 15 minutes, 30 minutes ou 1 heure.

Le graphique Total CPU indique la période pendant laquelle l'utilisation du CPU a augmenté.

Les graphiques Charge moy. 1 min, Charge moy. 5 min et Charge moy. 15 min indiquent le nombre de processus demandant du temps CPU au cours de la dernière minute, des cinq dernières minutes et des 15 dernières minutes, respectivement. Si la moyenne de charge est supérieure au nombre de vCPUs, l'instance pourrait connaître un goulot d'étranglement au niveau du CPU.

Pour afficher les processus du système d'exploitation, sélectionnez OS process list (Liste des processus du système d'exploitation) dans la liste déroulante Monitoring (Surveillance). Ensuite, triez la liste par valeurs CPU% pour identifier le processus qui a le plus d'utilisation CPU.

Exemple :

NAME VIRT RES CPU% MEM% VMLIMIT
oracleORCL [27074]ᵗ 6,07 GiB 1 007,24 MO 44,72 12,78 illimité
oracleORCL [27076]ᵗ 6,07 GiB 1 010,02 MO 44,64 12,82 illimité

Pour plus d'informations sur les colonnes de l'exemple précédent, consultez Affichage des métriques du système d'exploitation dans la console RDS.

Après avoir identifié le processus ayant la plus grande utilisation du CPU, vous pouvez exécuter la requête suivante pour mapper l'ID du processus à une session de la base de données :

SET LINESIZE 120;
SET PAGES 200;
COL OSUSER FOR a20;
COL USERNAME FOR a20;
COL MACHINE FOR a20;
SELECT a.sid, a.serial#, a.osuser, a.username, a.machine, a.sql_id, c.sql_text FROM v$session a, v$process b, v$sql c 
WHERE a.paddr=b.addr AND b.spid=&spid AND a.sql_id=c.sql_id(+);

Par défaut, tous les graphiques de la surveillance améliorée ne sont pas affichés sur le tableau de bord de la surveillance améliorée. Pour obtenir une vue de l'application au moment du pic d'utilisation du CPU, activez les graphiques supplémentaires en procédant comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Sélectionnez Databases (Bases de données) dans le panneau de navigation.
  3. Sélectionnez la base de données que vous souhaitez surveiller.
  4. Sélectionnez l'onglet Monitoring (Surveillance).
  5. Sélectionnez Enhanced monitoring (Surveillance améliorée) dans la liste déroulante Monitoring (Surveillance).
  6. Sous la vue Surveillance améliorée, choisissez Gérer les graphiques.
  7. Sélectionnez les graphiques que vous souhaitez afficher.
  8. Sélectionnez Save (Enregistrer).

Exemples de graphiques que vous pouvez choisir d'afficher :

Mémoire

  • Libre
  • En cache
  • En mémoire tampon
  • Total
  • Modifié
  • Actif
  • En bloc

Remarque : Les métriques liées aux métriques sont récupérées dans le fichier /proc/meminfo.

Swap

  • Swap
  • Libre

E/S disque et E/S de périphériques physiques

  • E/S en lecture
  • E/S en écriture
  • Taille moyenne des files d'attente
  • Await

Processeur

  • Utilisateur
  • Total
  • Système
  • En attente
  • Inactif
  • Nice

Pour la liste des métriques disponibles, consultez Métriques pour les instances de bases de données MariaDB, MySQL, Oracle et PostgreSQL.

Pour plus d'informations sur la surveillance améliorée, consultez Surveillance du système d'exploitation à l'aide de la surveillance améliorée.

Pour plus d'informations sur le coût de la surveillance améliorée, consultez Coût de la surveillance améliorée.

Métriques Performance Insights

Avec le tableau de bord Amazon RDS Performance Insights, vous pouvez visualiser la charge de la base de données et filtrer la charge par temps d'attente, instructions SQL, hôtes ou utilisateurs.

  1. Ouvrez la console Amazon RDS.
  2. Dans le panneau de navigation, sélectionnez Performance Insights.
  3. Choisissez l'instance de base de données que vous voulez surveiller.
  4. Pour Afficher la durée, sélectionnez la durée de votre choix.
  5. Dans le graphique Charge de la base de données, vérifiez le moment où vous avez constaté un pic d'utilisation du CPU.
  6. Choisissez l'onglet Top waits (Top attentes).
    Notez les principaux événements d'attente pendant la période du pic.
  7. Choisissez l'onglet Top SQL.
    Examinez et optimisez les instructions SQL qui ont contribué au pic.

Pour plus d'informations sur le coût de Performance Insights, consultez Tarification de Performance Insights.

Oracle Statspack

Statspack est un outil de rapport de performance qui fournit les métriques de performance de votre base de données sur une période de temps spécifique.

Pour examiner l'utilisation du CPU de votre instance à l'aide de Statspack, procédez comme suit :

  1. Générez un rapport statspack pour la période pendant laquelle vous avez rencontré un problème.
  2. Examinez et optimisez les requêtes qui entraînent une charge CPU élevée.
  3. Examinez les principaux événements d'attente.

Exemple d'extrait d'un rapport Statspack :

-> Total DB CPU (s):           3,345
-> Captured SQL accounts for   91.3% of Total DB CPU
-> SQL reported below exceeded  1.0% of Total DB CPU
    CPU                  CPU per            Elapsed                     Old
  Time (s)   Executions  Exec (s)  %Total   Time (s)    Buffer Gets  Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
   3043.36      598,100       0.01   91.0    3356.81     994,096,212  219593194

Module: JDBC Thin Client
SELECT tt.ORDER_TOTAL, tt.SALES_REP_ID, tt.ORDER_DATE, customers.CUST_FIRST_NAME, customers.CUST_LAST_NAME FROM   
(SELECT orders.ORDER_TOTAL, orders.SALES_REP_ID, orders.ORDER_DATE, orders.customer_id, rank() Over (ORDER BY orders.O

Pour plus d'informations, consultez la documentation Oracle pour Oracle Statspack.

AWR

AWR est un outil de rapport de performance Oracle qui fournit des métriques de performance sur une période de temps spécifique.

Remarque : AWR nécessite une licence Diagnostic Pack et n'est disponible que pour l'édition Enterprise d'Oracle.

Pour identifier la cause de votre charge CPU à l'aide de AWR, procédez comme suit :

1.    Exécutez une requête similaire à la suivante pour identifier l'ID d'instantané de début et de fin pour la période de charge CPU élevée :

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Générez le rapport AWR.

3.    Téléchargez le rapport AWR.

4.    Examinez et optimisez les requêtes répertoriées dans la section SQL classée par temps CPU du rapport AWR.

5.    Examinez les principaux événements d'attente.

Dans Oracle 12c et les versions ultérieures, les rapports ADDM et ASH sont inclus dans le rapport AWR.

Remarque : lorsqu'un rapport AWR est généré pour plus de quatre ID d'instantanés consécutifs, tous les rapports ADDM et ASH ne sont pas inclus. Pour générer ces rapports supplémentaires, utilisez les instructions des sections suivantes.

ADDM

ADDM est un outil de diagnostic qui analyse les données AWR, identifie les goulots d'étranglement des performances et fournit des recommandations.

Remarque : ADDM nécessite une licence Diagnostic Pack et n'est disponible que pour l'édition Enterprise d'Oracle.

1.    Exécutez une requête similaire à la suivante pour identifier l'ID d'instantané de début et de fin pour la période de charge CPU élevée :

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Générez le rapport ADDM.

3.    Téléchargez le rapport ADDM.

4.    Examinez les recommandations du rapport ADDM.

ASH

ASH est un outil de diagnostic qui collecte des informations sur les sessions actives. Pour résoudre les problèmes de performances transitoires à l'aide de ASH, procédez comme suit :

Remarque : ASH nécessite une licence Diagnostic Pack et n'est disponible que pour l'édition Enterprise d'Oracle.

1.    Générez un rapport ASH pour la période pendant laquelle la charge CPU était élevée.

2.    Téléchargez le rapport ASH.

3.    Examinez la section TOP SQL with TOP Events.

Pour plus d'informations sur l'interprétation des rapports AWR, ADDM et ASH, consultez la documentation du support Oracle pour Oracle Support Doc ID FAQ: Rapports Automatic Workload Repository (AWR) (Doc ID 1599440.1).

Oracle SQLT

Amazon RDS prend désormais en charge Oracle SQLTXPLAIN (SQLT) via l'option SQLT. SQLT est un outil utilisé pour diagnostiquer les instructions SQL qui ne fonctionnent pas correctement.

Pour produire un rapport pour une instruction SQL spécifique, consultez Oracle SQLT.

Si vous recevez l'erreur suivante lors de l'utilisation de SQLT :

Error: ORA-20106: SQLT parameter connect_identifier must be set when running SQLT from a remote client.

Exécutez l'une des commandes suivantes avant d'exécuter l'extrait :

EXEC sqltxadmin.sqlt$a.set_sess_param(‘connect_identifier’, ‘@SID’);
EXEC sqltxadmin.sqlt$a.set_param(‘connect_identifier’, ‘@example-hostname:example-port/example-sid’);