Como verificar / conhecer as consultas de execução mais alta

9

Gostaria de reunir estatísticas sobre as consultas de execução mais alta no meu banco de dados.

Para isso, preciso saber como posso rastrear consultas para criar visualizações ou visualizações materializadas para armazenar em cache os resultados das consultas de execução mais alta, pois tenho um grande banco de dados.

mamesaye
fonte
11
Você já conferiu aqui ?
Nelz
Por curiosidade, quão grande é grande? Além disso, por "execução mais alta", você quer dizer as consultas executadas com mais frequência ou as mais caras cumulativamente? E, com uma visão simples, você não poupa nada a esse respeito.
Dez
@ dezso: são 300k linhas na tabela principal. O mais caro seria uma prioridade, mas também quero saber o que é executado com mais frequência.
precisa saber é
Como @a_horse_with_no_name já disse .. a extensão pg_stat_statements é provavelmente o que você precisa.
Joishi Bodio

Respostas:

8

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 dbidqual você pode obter pg_databasepelo 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)%'

várias ferramentas gratuitas e comerciais que podem ajudá-lo a visualizar os dados.

Matt
fonte