Usando pg_stat_statements

29 de octubre de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

La herramienta más utilizada para tratar problemas de performance en PostgreSQL es pg_stat_statement. Esta es una extensión (similar a un módulo en Odoo) que brinda información sobre los queries ejecutados en una base de datos y estadísticas de su ejecución.

Hay algo que se debe entender, trabajar con performance de PostgreSQL es encontrar aquellos queries que ocasionan carga de trabajo en el servidor. Cualquier query ocasiona trabajo en el server, la cuestión es si es poca o mucha y para eso es util pg_stat_statements.

Instalación

Lo primero que se debe hacer es chequear en la base de datos que se va a trabajar que esté la extensión instalado. Por ejemplo con psql haciendo 

\dx


Ahi podemos ver que la extensión no se encuentra instalada. Para instalarla primero se debe instalar el paquete postgresql-contrib (si está utilizando Ubuntu)

sudo apt install postgresql-contrib-<version de Postgresql> 

El paso siguiente es modificar el archivo de configuración de PostgreSQL para agregar la extensión. Para ello se debe agregar el valor pg_stat_statements a la opción shared_preload_libraries del archivo postgresql.conf

shared_preload_libraries = 'pgaudit,pg_stat_statements'

Luego se debe reiniciar Postgresql. Una vez disponibilizada la extension, se debe crear la misma en la base de datos que deseamos monitorear. Para ello utilizamos el comando create extension

psql -d <base de datos>
create extension pg_stat_statements;


Despues de crear la extensión podemos ejecutar un query para comprobar que la misma este bien instalada

select * from pg_stat_statements;


Utilización

Estos consejos los leí en el blog de Cybertec, el cual recomiendo leer si estan interesados en PostgreSQL. Ahí se recomienda un query, el cual brinda información sobre las sentencias y su tiempo de uso:

SELECT substring(query, 1, 50) AS short_query,
round(total_exec_time::numeric, 2) AS total_exec_time,
calls,
round(mean_exec_time::numeric, 2) AS mean,
round((100 * total_exec_time /
sum(total_exec_time::numeric) OVER ())::numeric, 2) AS percentage_cpu
FROM pg_stat_statements
ORDER BY total_exec_time DESC

Este query lista los queries que se ejecutan en la base de datos, ordenados por tiempo de ejecución. Los que mas tardan se listan primeros.


Noten la columna percentage_cpu, el nombre lo dice todo.

Solo debe dejar corriendo la extensión durante dos o tres días de actividad normal en su base de datos, y luego ejecutar el query. Alla podra ver aquellas consultas que mas consumen. Y habiendo detectado las consultas las puede analizar mediante el EXPLAIN o con un desarrollador, el cual si es senior le puede indicar que módulo de Odoo le está ocasionando el problema.


Gustavo Orrillo 29 de octubre de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario