O que é o módulo do db pg_stat_statements
?
Por que é solicitado a habilitar por clientes?
Como é ativado?
O pg_stat_statements
O módulo fornece um meio de rastrear estatísticas de execução de todas as instruções SQL executadas por um servidor.
O módulo deve ser carregado com a adição pg_stat_statements
para shared_preload_libraries
em postgresql.conf
, pois requer memória compartilhada adicional. Isso significa que é necessário reiniciar o servidor para adicionar ou remover o módulo.
Link: https://www.postgresql.org/docs/9.4/pgstatstatements.html
Para implementar um schema do tipo view nesta tabela, que permite monitorar consultas que levam muito tempo. Dessa forma, os clientes poderão ajustá-los e otimizar o desempenho.
Essa extensão fornece métricas para executar consultas: que são as consultas executadas com mais frequência e o tempo que cada uma leva.
pg_stat_statements
Verificar se o PostgreSQL oficial contrib
o pacote para a versão de pôsteres está instalado.
$ dpkg -l | grep postgres
postgresql-contrib-9.3
Se não estiver instalado, instale-o.
$ apt-get install postgresql-contrib-9.3
Alterar postgresql.conf
para pré-carregar o módulo na inicialização
Padrão: shared_preload_libraries = ''
Novo: shared_preload_libraries = 'pg_stat_statements'
Se estiver usando ambos pg_stat_statements
e auto_explain
, use UM registro e separe-o com vírgulas:
shared_preload_libraries = 'auto_explain,pg_stat_statements'
No banco de dados que deseja monitorar, execute CREATE
query:
Nenhuma criação de extensão necessária para auto_explain
somente para pg_stat_statements
psql
postgres=# \c mydatabase
mydatabase=# CREATE EXTENSION pg_stat_statements;
Na seção OPTIONS PERSONALIZADAS de postgresql.conf
, adicione as linhas:
pg_stat_statements.max = 5000
pg_stat_statements.track = all
pg_stat_statements.save = on
Reiniciar o serviço postgresql
Exemplo: Obtenha as 5 principais consultas mais caras nos 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 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;