Como alguém disse nos comentários, pg_stat_statements é o caminho para obter as estatísticas. Coloque isso no seu postgresql.conf
:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
Em seguida, execute esta consulta:
CREATE EXTENSION pg_stat_statements;
Depois disso, essa consulta de exemplo (copiada dos documentos vinculados acima) fornecerá as estatísticas das 5 principais consultas de todos os bancos de dados :
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;
Se você deseja resultados para um único banco de dados , é necessário filtrar pelo dbid
qual você pode obter pg_database
pelo nome do banco de dados. Adicione esta cláusula WHERE à consulta acima:
WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')
Você também pode participar.
Quando você está testando isso, pode ser uma boa ideia excluir as consultas para as próprias tabelas de estatísticas / esquema, por exemplo:
AND query not similar to '%( pg_|information_schema)%'
Há várias ferramentas gratuitas e comerciais que podem ajudá-lo a visualizar os dados.