Respuestas:
Puede hacer coincidir una ID de back-end específica de Postgres con una ID de proceso del pg_stat_activity
sistema utilizando la tabla del sistema.
SELECT pid, datname, usename, query FROM pg_stat_activity;
Puede ser un buen punto de partida.
Una vez que sepa qué consultas se están ejecutando, puede investigar más a fondo ( EXPLAIN
/ EXPLAIN ANALYZE
; verificar bloqueos, etc.)
WHERE
cláusula, pero si no tiene una gran cantidad de PID es igual que Fácil de buscar a través de la salida completa. El manual de Postgres tiene detalles adicionales sobre lo que puede obtenerpg_stat_activity
, así como las otras tablas de recopilación de estadísticas (que pueden ayudarlo si su problema no es una consulta del usuario).
Yo estaba teniendo el mismo problema. El postgresql está configurado en AWS RDS y tenía una utilización del 100% de la CPU incluso después de aumentar la instancia. Depuré con el método que se muestra aquí y uno de los métodos funcionó para mí.
Verifiqué la consulta que se ejecutó durante más tiempo y llegué a saber que ciertas consultas estaban bloqueadas y se ejecutaban desde hace más de 3-4 horas. Para verificar desde cuánto tiempo se ejecuta la consulta, ejecute el siguiente comando:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
Si esto es más de una hora, entonces este es el problema. Elimine la conexión de larga duración y limite la antigüedad máxima de la conexión desde el lado de la aplicación.
Si este es realmente el administrador de correo que usa toda esa CPU, entonces es probable que tenga problemas de contención de bloqueo, probablemente debido a que es muy alto max_connections
. Considere bajar max_connections
y usar un agrupador de conexiones si este es el caso.
De lo contrario: Detalles, por favor. Salida completa de top -b -n 1
para empezar.
postgress
que sípostgres
y lo has copiado a mano.