¿Cómo puedo solucionar los problemas de uso elevado de la CPU en mi base de datos de Amazon RDS for Oracle database?

Última actualización: 29 de octubre de 2021

Estoy experimentando un uso elevado de la CPU en mi instancia de base de datos de Amazon Relational Database Service (Amazon RDS) for Oracle.

Descripción corta

Si la base de datos de RDS for Oracle presenta un uso elevado de la CPU, utilice una combinación de las siguientes herramientas para identificar la causa:

  • Métricas de Amazon CloudWatch
  • Métricas de Enhanced Monitoring
  • Métricas de Información sobre rendimiento
  • Oracle Statspack
  • Repositorio automático de cargas de trabajo (AWR)
  • Monitor automático de diagnóstico de base de datos (ADDM)
  • Historial de sesiones activas (ASH)
  • Oracle SQLT

Resolución

Al diagnosticar problemas relacionados con un uso elevado de la CPU, identifique el período de tiempo en el que se produjo el problema.

Métricas de CloudWatch

Amazon RDS envía métricas a CloudWatch cada minuto para cada base de datos activa. Revise las siguientes métricas de CloudWatch para Amazon RDS a fin de identificar patrones de CPU durante períodos prolongados:

  • CPUUtilization
  • CPUCreditUsage, si está usando una instancia T2 o T3
  • CPUCreditBalance, si está usando una instancia T2 o T3

Revise también las siguientes métricas para verificar si se ha producido un cambio en la carga de trabajo y si se ha superado algún umbral. Estos factores pueden contribuir al aumento del uso de la CPU.

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

Para obtener más información, consulteMétricas de Amazon RDS y Visualización de métricas de instancias de base de datos.

Métricas de Enhanced Monitoring

Enhanced Monitoring proporciona métricas en tiempo real del sistema operativo (SO) en el que se ejecuta la instancia de base de datos. Mientras que CloudWatch obtiene las métricas de uso de la CPU del hipervisor, Enhanced Monitoring obtiene estas métricas de un agente en la instancia de base de datos. Las métricas de Enhanced Monitoring son más pormenorizadas que las de CloudWatch. Las métricas de Enhanced Monitoring se almacenan durante 30 días en CloudWatch Logs.

Puede establecer el intervalo de recopilación de las métricas de 1 segundo a 1 minuto. Es una práctica recomendada establecer la pormenorización en 1 segundo o 5 segundos para las aplicaciones empresariales clave. Con esta pormenorización, las métricas proporcionan información más precisa sobre la carga de la aplicación para analizar los problemas de rendimiento.

Para ver el período de tiempo del pico de uso de la CPU, haga lo siguiente:
  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, elija Databases (Bases de datos).
  3. Elija la base de datos que desea monitorear.
  4. Elija la pestaña Monitoring (Monitoreo).
  5. Seleccione Enhanced monitoring (Monitoreo avanzado) en la lista desplegable Monitoring (Monitoreo).
  6. En la vista Enhanced Monitoring (Monitoreo avanzado), si la instancia es una implementación Multi-AZ, seleccione primary (primaria) para ver las métricas del sistema operativo de la instancia principal. Seleccionesecundary (secundaria) para ver las métricas de la réplica en espera.
  7. Seleccione la fecha y la hora de inicio.
  8. En la esquina derecha, seleccione la duración. Puede seleccionar 5 minutos, 15 minutos, 30 minutos o 1 hora.

El gráfico CPU Total indica el período de tiempo en el que aumentó el uso de la CPU.

Los gráficos Load Avg 1 min , Load Avg 5 min , y Load Avg 15 min muestran el número de procesos que solicitan el tiempo de la CPU durante el último minuto, los últimos cinco minutos y los últimos 15 minutos, respectivamente. Si el promedio de carga es mayor que el número de vCPUs, es posible que la instancia esté experimentando un cuello de botella en la CPU.

Para ver los procesos del sistema operativo, seleccione OS process list (Lista de procesos del sistema operativo) en la lista desplegable Monitoring (Monitoreo). A continuación, ordene la lista por valores de CPU% para identificar el proceso que usa más CPU.

Ejemplo:

NOMBRE VIRT RES CPU% MEM% VMLIMIT
oracleORCL [27074]ᵗ 6.07 GiB 1.007,24 MB 44,72 12,78 ilimitado
oracleORCL [27076]ᵗ 6.07 GiB 1.010,02 MB 44,64 12.82 ilimitado

Para obtener más información sobre las columnas del ejemplo anterior, consulte Visualización de métricas del sistema operativo en la consola de RDS.

Después de identificar el proceso con mayor uso de CPU, puede ejecutar la siguiente consulta para asignar el ID del proceso a una sesión de la base de datos:

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(+);

De forma predeterminada, no se muestran todos los gráficos de Enhanced Monitoring en el panel de Enhanced Monitoring. Para obtener una vista de la carga de trabajo en el momento del pico de uso de la CPU, active los gráficos adicionales haciendo lo siguiente:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, elija Databases (Bases de datos).
  3. Elija la base de datos que desea monitorear.
  4. Elija la pestaña Monitoring (Monitoreo).
  5. Seleccione Enhanced monitoring (Monitoreo avanzado) en la lista desplegable Monitoring (Monitoreo).
  6. En la vistaEnhanced Monitoring, elija Manage graphs (Administrar gráficos).
  7. Seleccione las gráficas que desee ver.
  8. Elija Save (Guardar).

Ejemplos de gráficos que puede elegir para ver:

Memoria

  • Gratis
  • Almacenado en caché
  • Almacenamiento en búfer
  • Total
  • Sucio
  • Activo
  • Slab

Nota: Las métricas relacionadas con las métricas se recuperan del archivo /proc/meminfo.

Intercambiar

  • Intercambiar
  • Gratis

E/S de disco y E/S de dispositivos físicos

  • Lectura de E/S
  • Escritura de E/S
  • Tamaño de cola Ave
  • En espera

CPU

  • Usuario
  • Total
  • Sistema
  • Espera
  • Inactivo
  • Bien

Para obtener la lista de métricas disponibles, consulte Métricas para instancias de base de datos MariaDB, MySQL, Oracle y PostgreSQL.

Para obtener más información sobre Enhanced Monitoring, consulte Monitoreo del sistema operativo mediante Enhanced Monitoring.

Para obtener información sobre el costo de Enhanced Monitoring, consulte Costo de Enhanced Monitoring.

Métricas de Información sobre rendimiento

Con el panel de control de Información sobre rendimiento de Amazon RDS puede visualizar la carga de la base de datos y filtrar la carga por esperas, instrucciones SQL, hosts o usuarios.

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, elija Información sobre rendimiento.
  3. Elija la instancia de base de datos que desea monitorear.
  4. En View past (Ver pasado), selecciona la duración de su elección.
  5. En el gráficoDatabase Load (Carga de la base de datos), verifique el momento en que se produjo un pico en el uso de la CPU.
  6. Elja la pestaña Top waits (Esperas más altas).
    Observe los principales eventos de espera durante el periodo de tiempo del pico.
  7. Elija la pestaña Top SQL (SQL más altas).
    Revise y optimice las sentencias SQL que contribuyeron al pico.

Para obtener información sobre el costo de la función Información sobre rendimiento, consulte los precios de Información sobre rendimiento.

Oracle Statspack

Statspack es una herramienta de informes de rendimiento que proporciona las métricas de rendimiento de la base de datos durante un período de tiempo específico.

Para revisar el uso de la CPU de tu instancia utilizando Statspack, haga lo siguiente:

  1. Genere un informe statspack para el período de tiempo en el que se produjo el problema.
  2. Revise y optimice las consultas que dan lugar a una alta carga de la CPU.
  3. Revise los principales eventos de espera.

Ejemplo de extracto de un informe 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

Para obtener más información, consulte la documentación de Oracle Statspack.

AWR

AWR es una herramienta de informes de rendimiento de Oracle que proporciona métricas de rendimiento durante un período de tiempo específico.

Nota: AWR requiere una licencia de paquete de diagnóstico y solo está disponible para la edición Enterprise de Oracle.

Para identificar la causa de la carga de la CPU utilizando AWR, haga lo siguiente:

1.    Ejecute una consulta similar a la siguiente para identificar el ID de inicio y fin de la instantánea para el período de tiempo de alta carga de la CPU:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Genere el informe AWR.

3.    Descargue el informe AWR.

4.    Revise y optimice las consultas que aparecen en la sección SQL ordenada por tiempo de CPU del informe AWR.

5.    Revise los principales eventos de espera.

En Oracle 12c y versiones posteriores, los informes ADDM y ASH se incluyen en el informe AWR.

Nota: Cuando se genera un informe AWR para más de cuatro ID de instantáneas consecutivos, no se incluyen todos los informes ADDM y ASH. Para generar estos informes adicionales, siga las instrucciones de las secciones siguientes.

ADDM

ADDM es una herramienta de diagnóstico que analiza los datos de AWR, identifica cuellos de botella en el rendimiento y ofrece recomendaciones.

Nota: ADDM requiere una licencia de paquete de diagnóstico y solo está disponible para la edición Enterprise de Oracle.

1.    Ejecute una consulta similar a la siguiente para identificar el ID de inicio y fin de la instantánea para el período de tiempo de alta carga de la CPU:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Genere el informe ADDM.

3.    Descargue el informe ADDM.

4.    Revise las recomendaciones del informe ADDM.

ASH

ASH es una herramienta de diagnóstico que recopila información de la sesión activa. Para solucionar problemas de rendimiento transitorios utilizando ASH, haga lo siguiente:

Nota: ASH requiere una licencia de paquete de diagnóstico y solo está disponible para la edición Enterprise de Oracle.

1.    Genere un informe ASH para el período de tiempo en que hubo una carga elevada de la CPU.

2.    Descargue el informe ASH.

3.    Revise la sección TOP SQL con TOP Eventos.

Para obtener información sobre la interpretación de los informes AWR, ADDM y ASH, consulte la documentación de Soporte de Oracle para el Doc ID de Preguntas Frecuentes de Soporte de Oracle: Informes del Repositorio automático de carga de trabajo (AWR) (Doc ID 1599440.1).

Oracle SQLT

Amazon RDS es compatible con Oracle SQLTXPLAIN (SQLT) mediante el uso de la opción SQLT. SQLT es una herramienta que se utiliza para diagnosticar sentencias SQL que no funcionan bien.

Para generar un informe para una sentencia SQL específica, consulte Oracle SQLT.

Si recibe el siguiente error al utilizar SQLT:

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

Ejecute uno de los siguientes comandos antes de ejecutar la extracción:

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