Como alguien dijo en los comentarios, pg_stat_statements es la forma de obtener las estadísticas. Pon esto en tu postgresql.conf
:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
Luego ejecute esta consulta:
CREATE EXTENSION pg_stat_statements;
Después de eso, esta consulta de muestra (copiada de los documentos vinculados anteriormente) le dará las estadísticas de las 5 consultas principales de todas 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 ORDER BY total_time DESC LIMIT 5;
Si desea resultados para una sola base de datos , debe filtrar por el dbid
cual puede obtener pg_database
por nombre de base de datos. Agregue esta cláusula WHERE a la consulta anterior:
WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')
También podrías hacer una unión.
Cuando esté probando esto, puede ser una buena idea excluir las consultas a las tablas de estadísticas / esquemas, por ejemplo:
AND query not similar to '%( pg_|information_schema)%'
Hay un montón de herramientas gratuitas y comerciales que pueden ayudarlo a visualizar los datos.