Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

¿Cómo puedo comprobar las consultas en ejecución y diagnosticar los problemas de consumo de recursos para mi instancia de base de datos de Amazon RDS o Aurora PostgreSQL?

4 minutos de lectura
0

Necesito ver qué consultas se están ejecutando activamente en una instancia de base de datos Amazon Relational Database Service (Amazon RDS) o Amazon Aurora PostgreSQL. ¿Cómo puedo hacerlo?

Resolución

Comprobar las consultas en ejecución

Debe otorgarse a su cuenta de usuario el rol de rds_superuser para ver todos los procesos que se ejecutan en una instancia de base de datos de RDS para PostgreSQL o Aurora PostgreSQL. De lo contrario, pg_stat_activity muestra solo las consultas que se están ejecutando para sus propios procesos. Para obtener más información, consulte la documentación de PostgreSQL para El recopilador de estadísticas.

1.Conéctese a la instancia de base de datos que PostgreSQL o Aurora PostgreSQL está ejecutando.

2.Ejecute el siguiente comando:

SELECT * FROM pg_stat_activity ORDER BY pid;

También puede modificar este comando para ver la lista de consultas en ejecución ordenadas según el momento en que se establecieron las conexiones:

SELECT * FROM pg_stat_activity ORDER BY backend_start;

Si el valor de la columna es nulo, entonces no hay ninguna transacción abierta en esa sesión:

SELECT * FROM pg_stat_activity ORDER BY xact_start;

O bien, vea la misma lista de consultas en ejecución ordenadas según el momento en que se ejecutó la última consulta:

SELECT * FROM pg_stat_activity ORDER BY query_start;

Para obtener una vista agregada de los eventos de espera, si los hay, ejecute el siguiente comando:

select state, wait_event, wait_event_type, count(*) from pg_stat_activity group by 1,2,3 order by wait_event;

Diagnosticar el consumo de recursos

Al utilizar pg_stat_activity y habilitar la supervisión mejorada, puede identificar la consulta o el proceso que está consumiendo grandes cantidades de recursos del sistema. Después de habilitar la supervisión mejorada, asegúrese de que el ajuste de granularidad sea suficiente para ver la información que necesita para diagnosticar el problema. A continuación, puede consultar pg_stat_activity para ver las actividades actuales de su base de datos y las métricas de supervisión mejorada en ese momento.

1.Identifique la consulta que está consumiendo recursos consultando la métrica de la lista de procesos del SO. En el siguiente ejemplo, el proceso consume aproximadamente el 95 % del tiempo de la CPU en la instancia de base de datos de RDS. El ID de proceso (pid) es 14431y el proceso ejecuta una instrucción SELECT. También puede ver el uso de la memoria del sistema comprobando el MEM%.

NOMBREVIRTRESCPU%MEM%VMLIMIT
postgres: master postgres 27.0.3.145(52003) SELECT [14431]457,66 MB27,7 MB95,152,78ilimitado

2.Conéctese a la instancia de base de datos que PostgreSQL o Aurora PostgreSQL está ejecutando.

3.Identifique la actividad actual de la sesión mediante la ejecución del siguiente comando:

SELECT * FROM pg_stat_activity WHERE pid = PID;

**Nota: **Reemplace el PIDpor el PID que ha identificado en el paso 1.

4.Compruebe el resultado del comando:

datid            | 14008
datname          | postgres
pid              | 14431
usesysid         | 16394
usename          | master
application_name | psql
client_addr      | 27.0.3.145
client_hostname  |
client_port      | 52003
backend_start    | 2020-03-11 23:08:55.786031+00
xact_start       | 2020-03-11 23:12:16.960942+00
query_start      | 2020-03-11 23:12:16.960942+00
state_change     | 2020-03-11 23:12:16.960945+00
wait_event_type  |
wait_event       |
state            | active
backend_xid      |
backend_xmin     | 812
query            | SELECT COUNT(*) FROM columns c1, columns c2, columns c3, columns c4, columns c5;
backend_type     | client backend

Para detener el proceso que ejecuta la consulta, invoque la siguiente consulta desde otra sesión. Asegúrese de reemplazar el PIDpor el pid del proceso que ha identificado en el paso 3.

SELECT pg_terminate_backend(PID);

**Importante:**Antes de finalizar las transacciones, evalúe el posible impacto que cada transacción tiene en el estado de la base de datos y de la aplicación.


Información relacionada

¿Cómo puedo solucionar problemas de uso elevado de la CPU en Amazon RDS o Amazon Aurora PostgreSQL?

Crear roles

Supervisión mejorada

Documentación de PostgreSQL para psql

Documentación de PostgreSQL para pg_stat_activity