Che cos'è il modulo db pg_stat_statements
?
Perché viene richiesto di abilitare i client?
Come viene attivato?
La pg_stat_statements
Il modulo fornisce un mezzo per monitorare le statistiche di esecuzione di tutte le istruzioni SQL eseguite da un server.
Il modulo deve essere caricato aggiungendo pg_stat_statements
a shared_preload_libraries
in postgresql.conf
, perché richiede una memoria condivisa aggiuntiva. Ciò significa che è necessario riavviare il server per aggiungere o rimuovere il modulo.
Collegamento: https://www.postgresql.org/docs/9.4/pgstatstatements.html
Implementare uno schema di tipo di visualizzazione in questa tabella che ci consente di monitorare le query che richiedono molto tempo. In questo modo i client potranno ottimizzare le prestazioni e ottimizzare quelle funzionalità.
Questa estensione fornisce metriche sull'esecuzione delle query: che sono le query eseguite più frequentemente e quanto tempo ciascuna richiede.
pg_stat_statements
Verifica che PostgreSQL ufficiale contrib
Il pacchetto per la versione postgres è installato.
$ dpkg -l | grep postgres
postgresql-contrib-9.3
Se non è installato, installalo.
$ apt-get install postgresql-contrib-9.3
Modifica postgresql.conf
per precaricare il modulo all’avvio
Impostazione predefinita: shared_preload_libraries = ''
Nuova: shared_preload_libraries = 'pg_stat_statements'
Se utilizzi entrambi pg_stat_statements
e auto_explain
, utilizza un record ONE e separa con virgole:
shared_preload_libraries = 'auto_explain,pg_stat_statements'
Nel database che si desidera monitorare, eseguire CREATE
query:
Nessuna creazione di estensione richiesta per auto_explain
, solo per pg_stat_statements
psql
postgres=# \c mydatabase
mydatabase=# CREATE EXTENSION pg_stat_statements;
Nella sezione OPTIONS personalizzati di postgresql.conf
, aggiungi le righe:
pg_stat_statements.max = 5000
pg_stat_statements.track = all
pg_stat_statements.save = on
Riavvia il servizio postgresql
Esempio: Ottieni le 5 query più costose nei database
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;