Comparteix a través de


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 muestra cómo identificar rápidamente la causa principal del uso elevado de la CPU y posibles acciones correctivas para controlar el uso de la CPU al usar Azure Database for PostgreSQL: servidor flexible.

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 Explicar análisis, Agrupación de conexiones y Tablas de vaciado.

Guías de solución de problemas

Con las guías de solución de problemas de características que están disponibles en el portal de Azure Database for PostgreSQL: servidor flexible, se puede encontrar la posible causa principal y las recomendaciones para mitigar el escenario de uso de CPU elevado. Para ver cómo configurar las guías de solución de problemas para usarlas, siga las guías de solución de problemas de configuración.

Herramientas para identificar un uso elevado de CPU

Tenga en cuenta estas 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 para una fecha y período definidos. Las métricas proporcionan información sobre la duración del tiempo con un uso alto de la CPU. Compare los gráficos de E/S por segundo de escritura, E/S por segundo de lectura, rendimiento de lectura y rendimiento de escritura con el uso de la CPU para averiguar los tiempos en los que la carga de trabajo ha provocado un uso elevado de la CPU. 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 de tiempo de ejecución y lo 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, las bases de datos y las consultas se almacenan en una base de datos llamada azure_sys en la instancia del servidor flexible de Azure Database for PostgreSQL. Para obtener instrucciones paso a paso, consulte el Almacén de consultas.

pg_stat_statements

La extensión pg_stat_statements ayuda a identificar las consultas que consumen tiempo en el servidor.

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, las 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 conexiones de número por estado

Un gran número de conexiones a la base de datos es otro problema que podría provocar un aumento del uso de la CPU y de la 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 1 ORDER BY 1;

Resolver el uso elevado de CPU

Use Explain Analyze, PG Bouncer, agrupación de conexiones y terminar transacciones de ejecución prolongada para resolver un uso elevado de la CPU.

Uso de Explicación del análisis

Una vez que sepa la consulta que se ejecuta durante mucho tiempo, use EXPLAIN para investigar aún más la consulta y ajustarla.
Para obtener más información sobre el comando EXPLAIN, consulte Explain Plan.

PGBouncer y agrupación de conexiones

Cuando haya muchas conexiones inactivas o muchas conexiones que consumen la CPU, considere la posibilidad de usar un agrupador de conexiones como PgBouncer.

Para obtener más información sobre PgBouncer, revise:

Agrupación de conexiones

Procedimientos recomendados

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, deberá detectar el 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 usar la consulta siguiente para finalizarlo:

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_name>;