¿Cómo soluciono los problemas derivados del uso elevado de la CPU en la base de datos de Amazon RDS para Oracle?

11 minutos de lectura
0

Estoy experimentando un elevado uso de la CPU en mi instancia de la base de datos del servicio de base de datos relacional de Amazon, Amazon RDS, para Oracle.

Descripción breve

Si su base de datos de RDS para Oracle hace un uso elevado de la CPU, utilice una combinación de las siguientes herramientas para detectar la causa:

  • Métricas de Amazon CloudWatch
  • Métricas de Enhanced Monitoring
  • Métricas de Performance Insights
  • Oracle Statspack
  • Repositorio automático de cargas de trabajo (AWR)
  • Monitor de diagnóstico automático de bases de datos (ADDM)
  • Historial de sesiones activas (ASH)
  • SQLT de Oracle

Solución

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

Métricas de CloudWatch

Cada minuto, Amazon RDS envía a CloudWatch las métricas de cada base de datos que esté activa. Para identificar los patrones de la CPU durante períodos prolongados, revise las siguientes métricas de CloudWatch para Amazon RDS:

  • CPUUtilization (Uso de la CPU)
  • CPUCreditUsage (Uso del crédito de la CPU), si se utiliza una instancia T2 o T3
  • CPUCreditBalance (Balance del crédito de la CPU), si se utiliza una instancia T2 o T3

Además, revise las siguientes métricas para comprobar si se ha producido algún cambio en la carga de trabajo y si se ha superado algún umbral. Estos factores podrían contribuir al aumento del uso de la CPU.

  • DatabaseConnections (Conexiones a bases de datos)
  • DiskQueueDepth (Profundidad de la cola del disco)
  • FreeableMemory (Memoria liberable)
  • ReadIOPS (Lectura de operaciones de entrada/salida por segundo)
  • ReadLatency (Latencia de la lectura)
  • WriteIOPS (Escritura de operaciones de entrada/salida por segundo)
  • WriteLatency (Latencia de la escritura)

Para obtener más información, consulte Supervisión de las métricas de Amazon RDS con Amazon CloudWatch y Visualización del estado y las recomendaciones de instancias.

Métricas de Enhanced Monitoring

Enhanced Monitoring proporciona en tiempo real las métricas del sistema operativo en el que se ejecuta la instancia de la base de datos. Si bien CloudWatch obtiene las métricas del uso de la CPU desde el hipervisor, Enhanced Monitoring obtiene estas métricas desde un agente de la instancia de base de datos. Las métricas de Enhanced Monitoring son más detalladas que las métricas de CloudWatch. Las métricas de Enhanced Monitoring se almacenan durante 30 días en los registros de CloudWatch.

Se puede definir el intervalo de recopilación de las métricas para que oscile entre 1 segundo y 1 minuto. Si las aplicaciones son críticas para la empresa, se recomienda configurar la granularidad en 1 o 5 segundos. Con esta granularidad, las métricas proporcionan información más precisa de la carga sobre la aplicación para analizar problemas de rendimiento.

Para ver el período de tiempo del pico de utilización de la CPU, haga lo siguiente:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, seleccione Bases de datos.
  3. Seleccione la base de datos que desee supervisar.
  4. Seleccione la pestaña Supervisión.
  5. Seleccione Enhanced Monitoring en la lista desplegable Supervisión.
  6. En la vista de Enhanced Monitoring, si la instancia es una implementación de Multi-AZ, seleccione principal para ver las métricas del sistema operativo de la instancia principal. Seleccione 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. Se puede seleccionar 5 minutos, 15 minutos, **30 minutos ** o 1 hora.

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

Los gráficos Carga promedio de 1 min, Carga promedio de 5 min Carga promedio de 15 min muestran la cantidad de procesos que solicitaron el tiempo de la CPU durante el último minuto, los últimos cinco minutos y los últimos 15 minutos, respectivamente. Si el promedio de la carga es mayor que la cantidad de vCPU (CPU virtuales), es posible que la instancia esté experimentando un cuello de botella en la CPU.

Para ver los procesos del sistema operativo, seleccione Lista de procesos del sistema operativo en la lista desplegable Supervisión. A continuación, para identificar el proceso que más utiliza la CPU, ordene la lista por valores de % de la CPU.

Ejemplo:

NAME (NOMBRE)VIRTRES% DE CPU% DE MEM.VMLIMIT (LÍMITE DE LA MÁQUINA VIRTUAL)
oracleORCL [27074]ᵗ6,07 GB1007,24 MB44,7212,78ilimitado
Oracle ORCL\ [27076]6,07 GB1010,02 MB44,6412,82ilimitado

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

Tras identificar el proceso con el mayor uso de la CPU, se podrá 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, todos los gráficos de Enhanced Monitoring no se muestran en el panel de control de Enhanced Monitoring. Para consultar la carga de trabajo en el momento del pico de uso de la CPU, active los gráficos adicionales de la siguiente manera:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, seleccione Bases de datos.
  3. Seleccione la base de datos que desee supervisar.
  4. Seleccione la pestaña Supervisión.
  5. Seleccione Enhanced Monitoring en la lista desplegable Supervisión.
  6. En la vista de Enhanced Monitoring, seleccione Administrar gráficos.
  7. Seleccione los gráficos que desee consultar.
  8. Seleccione Guardar.

Ejemplos de gráficos que se pueden consultar:

Memoria

  • Libre
  • En caché
  • En búfer
  • Total
  • Con modificaciones
  • Activa
  • De bloques

Nota: Las métricas interrelacionadas se recuperan desde el archivo /proc/meminfo.

Intercambio

  • Intercambio
  • Libre

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

  • Lectura de E/S por segundo
  • Escritura de E/S por segundo
  • Tamaño promedio de la cola
  • Esperar

CPU

  • Usuario
  • Total
  • Sistema
  • Espera
  • Inactivo
  • NICE

Para ver la lista de las métricas disponibles, consulte Descripción general de Enhanced Monitoring.

Para obtener más información sobre la supervisión mejorada, consulte Supervisión de las métricas del sistema operativo con Enhanced Monitoring.

Para obtener información sobre el coste de «Enhanced Monitoring», consulte Coste de Enhanced Monitoring.

Métricas de Performance Insights

Con el panel Performance Insights de Amazon RDS se puede visualizar la carga de la base de datos y filtrarla por esperas, instrucciones SQL, hosts o usuarios.

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación seleccione Performance Insights.
  3. Seleccione la instancia de la base de datos que desee supervisar.
  4. En Consultar historial, seleccione la duración que prefiera.
  5. En el gráfico Carga de la base de datos, compruebe el momento en el que se incrementó el uso de la CPU.
  6. Seleccione la pestaña Esperas máximas.
    Tenga en cuenta los eventos de esperas máximas durante el período en que se produjo el pico.
  7. Seleccione la pestaña Principales SQL.
    Revise y optimice las instrucciones SQL que contribuyeron al aumento.

Para obtener información sobre el coste de «Performance Insights», consulte los precios de Performance Insights.

Oracle Statspack

Statspack es una herramienta de elaboración 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 con Statspack el uso de la CPU por parte de la instancia, haga lo siguiente:

  1. Genere un informe con Statspack del período en el que se produjo algún problema.
  2. Revise y optimice las consultas que generan una carga elevada de la CPU.
  3. Revise los eventos de esperas máximas.

Ejemplo de extracto desde un informe de 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 sobre Oracle Statspack.

AWR

AWR (en el sitio web de Oracle) es una herramienta de elaboración 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 Diagnostic Pack y solo está disponible para Enterprise Edition de Oracle.

Para identificar el motivo de la carga de la CPU por AWR, haga lo siguiente:

1.    Para identificar el ID de la instantánea inicial y final del período de tiempo de alta carga de la CPU, ejecute una consulta similar a la siguiente :

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 figuran en la sección SQL ordenadas por tiempo de la CPU del informe AWR.

5.    Revise los eventos de esperas máximas.

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 consecutivas, no se incluyen todos los informes ADDM y ASH. Para generar estos informes adicionales, siga las instrucciones de las siguientes secciones.

ADDM

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

**Nota:**ADDM requiere una licencia de Diagnostic Pack y solo está disponible para Enterprise Edition de Oracle.

1.    Para identificar el ID de la instantánea inicial y final del período de alta carga de la CPU, ejecute una consulta similar a la siguiente :

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 (en el sitio web de Oracle) es una herramienta de diagnóstico que recopila información sobre las sesiones que están activas. Para solucionar los problemas transitorios de rendimiento mediante ASH, haga lo siguiente:

**Nota:**ASH requiere una licencia de Diagnostic Pack y solo está disponible para Enterprise Edition de Oracle.

1.    Genere un informe ASH del período de tiempo de alta carga de la CPU.

2.    Descargue el informe ASH.

3.    Revise la sección Principales SQL con eventos de esperas máximas.

Para obtener información sobre la interpretación de los informes AWR, ADDM y ASH, consulte la documentación de soporte de Oracle en preguntas frecuentes sobre el ID de los documentos de Oracle Support: Informes del repositorio automático de cargas de trabajo (AWR) (ID de documento 1599440.1).

SQLT de Oracle

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

Para generar un informe sobre una instrucción SQL específica, consulte Oracle SQLT.

Si se recibe el siguiente error al utilizar SQLT:

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

Antes de ejecutar la extracción, ejecute uno de los siguientes comandos:

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

Información relacionada

Descripción general de las métricas de supervisión en Amazon RDS

Generar informes de rendimiento con el repositorio automático de cargas de trabajo (AWR)

Generar un informe ADDM

Generar un informe ASH

¿Cómo compruebo las estadísticas de rendimiento de una instancia de la base de datos de Amazon RDS que esté ejecutando Oracle?