Solución de problemas de consumo elevado de CPU en Azure Database for PostgreSQL: servidor flexible
SE APLICA A: Azure Database for PostgreSQL con servidor flexible
En este artículo se describe cómo identificar la causa principal del uso elevado de la CPU. También proporciona posibles acciones correctivas para controlar el uso de la CPU al usar Servidor flexible de Azure Database for PostgreSQL.
En este artículo, aprenderá lo siguiente:
- Acerca de las guías de solución de problemas para identificar y obtener recomendaciones para mitigar las causas principales.
- Acerca de las herramientas para identificar un uso elevado de la CPU, como métricas de Azure, almacén de consultas y pg_stat_statements.
- Cómo identificar las causas principales, como consultas de larga duración y conexiones totales.
- Cómo resolver un uso elevado de la CPU mediante EXPLAIN ANALYZE, la agrupación de conexiones y las tablas de vaciado.
Guías de solución de problemas
Con las Guías de solución de problemas puede identificar la causa principal probable de un escenario elevado de CPU y puede leer las recomendaciones para mitigar el problema encontrado.
Para obtener información sobre cómo configurar y usar las guías de solución de problemas, siga guías de solución de problemas de configuración.
Herramientas para identificar un uso elevado de CPU
Tenga en cuenta el uso de la siguiente lista de herramientas para identificar un uso elevado de la CPU.
Métricas de Azure
Métricas de Azure es un buen punto de partida para comprobar el uso de la CPU durante un período específico. Las métricas proporcionan información sobre los recursos utilizados durante el período en el que el uso de la CPU es alto. Compare los gráficos de IOPs de escritura, IOPs de lectura, Rendimiento de lectura en bytes/seg., y Rendimiento de escritura en bytes/seg. con Porcentaje de CPU, para averiguar los tiempos en los que la carga de trabajo provocó una CPU elevada.
Para la supervisión proactiva, puede configurar alertas en las métricas. Para obtener instrucciones paso a paso, consulte Métricas de Azure.
Almacén de consultas
El almacén de consultas captura automáticamente el historial de consultas y estadísticas en tiempo de ejecución, y los conserva para su revisión. Segmenta los datos por tiempo para que pueda ver los patrones de uso temporales. Los datos de todos los usuarios, bases de datos y consultas se almacenan en una base de datos denominada azure_sys
en la instancia de servidor flexible de Azure Database for PostgreSQL.
El almacén de consultas puede correlacionar la información del evento de espera con estadísticas de tiempo de ejecución de consultas. Use el almacén de consultas para identificar las consultas que tienen un consumo elevado de CPU durante el período de interés.
Para obtener más información, consulte almacén de consultas.
pg_stat_statements
La extensión pg_stat_statements
ayuda a identificar las consultas que consumen tiempo en el servidor. Para obtener más información sobre esta extensión, consulte su documentación.
Tiempo medio de ejecución medio o promedio
Para las versiones 13 y posteriores de Postgres, use la siguiente instrucción para ver las cinco primeras instrucciones SQL por tiempo medio o promedio de ejecución:
SELECT userid::regrole, dbid, query, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 5;
Tiempo de ejecución total
Ejecute las siguientes instrucciones para ver las cinco primeras instrucciones SQL por tiempo de ejecución total.
Para las versiones 13 y posteriores de Postgres, use la siguiente instrucción para ver las cinco primeras instrucciones SQL por tiempo total de ejecución:
SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY total_exec_time
DESC LIMIT 5;
Identificación de las causas principales
Si los niveles de consumo de CPU son altos en general, los siguientes podrían ser posibles causas principales:
Transacciones de ejecución prolongada
Las transacciones de ejecución prolongada pueden consumir recursos de la CPU que pueden dar lugar a un uso elevado de la misma.
La consulta siguiente ayuda a identificar las conexiones que se ejecutan durante más tiempo:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() AND state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
Número total de conexiones y número de conexiones por estado
Un gran número de conexiones a la base de datos también puede provocar un aumento del uso de CPU y memoria.
La consulta siguiente proporciona información sobre el número de conexiones por estado:
SELECT state, count(*)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
GROUP BY state
ORDER BY state ASC;
Resolver el uso elevado de CPU
Use EXPLAIN ANALYZE, considere la posibilidad de usar el agrupador de conexiones PgBouncer integrado y finalice las transacciones de larga duración para resolver un uso elevado de la CPU.
Uso de EXPLAIN ANALYZE
Una vez que conozca las consultas que consumen más CPU, use EXPLAIN ANALYZE para investigarlas y optimizarlas.
Para obtener más información sobre el comando EXPLAIN ANALYZE, revise su documentación.
PgBouncer, un agrupador de conexiones integrado
En situaciones en las que hay muchas conexiones de corta duración o muchas conexiones que permanecen inactivas durante la mayor parte de su vida, considere la posibilidad de usar un agrupador de conexiones como PgBouncer.
Para obtener más información sobre PgBouncer, consulte agrupador de conexiones y procedimientos recomendados de control de conexiones de con PostgreSQL
El servidor flexible de Azure Database for PostgreSQL ofrece PgBouncer como una solución de agrupación de conexiones integrada. Para obtener más información, consulte las PgBouncer.
Finalización de transacciones de larga duración
Podría considerar la posibilidad de terminar una transacción de ejecución prolongada como una opción.
Para finalizar el PID de una sesión, debe encontrar su PID mediante la consulta siguiente:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() AND state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
También puede filtrar por otras propiedades, como usename
(nombre de usuario), datname
(nombre de base de datos), etc.
Una vez que tenga el PID de la sesión, puede finalizarla mediante la consulta siguiente:
SELECT pg_terminate_backend(pid);
Supervisión de vacío y estadísticas de tabla
Mantener actualizadas las estadísticas de tabla ayuda a mejorar el rendimiento de las consultas. Supervise si se está llevando a cabo una autovacuificación regular.
La consulta siguiente ayuda a identificar las tablas que necesitan vaciado:
SELECT schemaname,relname,n_dead_tup,n_live_tup,last_vacuum,last_analyze, last_autovacuum,last_autoanalyze
FROM pg_stat_all_tables
WHERE n_live_tup > 0;
Las columnas last_autovacuum
y last_autoanalyze
proporcionan la fecha y hora en que la tabla se ha exportado automáticamente o analizado por última vez. Si las tablas no se vacían con regularidad, siga los pasos necesarios para ajustar el vaciado automático.
Para obtener más información sobre la solución de problemas y el ajuste del vaciado automático, consulte Solución de problemas de l vaciado automático.
Una solución a corto plazo sería realizar un análisis de vacío manual de las tablas en las que se ven consultas lentas:
VACUUM ANALYZE <table>;
Comparta sugerencias y errores con el equipo de producto de Azure Database for PostgreSQL.