¿Qué es el módulo de base de datos? pg_stat_statements
?
¿Por qué los clientes lo solicitan para activarlo?
¿Cómo se activa?
La variable pg_stat_statements
proporciona un medio para rastrear las estadísticas de ejecución de todas las instrucciones SQL ejecutadas por un servidor.
El módulo debe cargarse añadiendo pg_stat_statements
a shared_preload_libraries
en postgresql.conf
, porque requiere memoria compartida adicional. Esto significa que es necesario reiniciar el servidor para agregar o quitar el módulo.
Vínculo: https://www.postgresql.org/docs/9.4/pgstatstatements.html
Implementar un esquema de tipo view en esta tabla que nos permite monitorizar consultas que tardan mucho tiempo. De este modo, los clientes podrán ajustar estos ajustes y optimizar el rendimiento.
Esta extensión proporciona métricas sobre la ejecución de consultas: que son las consultas que se ejecutan con más frecuencia y cuánto tarda cada una de ellas.
pg_stat_statements
Verificar que PostgreSQL oficial contrib
para la versión postgres está instalado.
$ dpkg -l | grep postgres
postgresql-contrib-9.3
Si no está instalado, instálelo.
$ apt-get install postgresql-contrib-9.3
Cambiar postgresql.conf
para cargar previamente el módulo al inicio
Predeterminado: shared_preload_libraries = ''
Nuevo: shared_preload_libraries = 'pg_stat_statements'
Si usa ambas pg_stat_statements
y auto_explain
, utilice un registro ONE y separe con comas:
shared_preload_libraries = 'auto_explain,pg_stat_statements'
En la base de datos que desee monitorizar, ejecute CREATE
consulta:
No se requiere ninguna creación de extensión para auto_explain
, solo para pg_stat_statements
psql
postgres=# \c mydatabase
mydatabase=# CREATE EXTENSION pg_stat_statements;
En la sección OPTIONS PERSONALIZADOS de postgresql.conf
, agregue las líneas:
pg_stat_statements.max = 5000
pg_stat_statements.track = all
pg_stat_statements.save = on
Reiniciar el servicio postgresql
Ejemplo: Obtener las 5 consultas más costosas de las bases de datos
SELECT query, calls, total_time, rows, 100.0\*shared_blks_hit/nullif(shared_blks_hit+shared_blks_read,0) AS hit_percent
from pg_stat_statements as s inner join pg_database as d on d.oid = s.dbid
where d.datname = 'Database_Name'
order by total_time desc limit 5;