Postgres: come posso vedere tutte le istruzioni SQL eseguite dal server di database?


23

Sono in procinto di riesaminare ogni istruzione SQL eseguita da un'applicazione rispetto al database, per motivi di prestazioni. Esiste un modo semplice per registrare tutte le istruzioni eseguite dal server di database PostgreSQL? Grazie.


In questa seguente spiegazione viene spiegato come visualizzare la query in esecuzione corrente tutorialdba.com/2016/11/pgstatactivity-view-explanation-in.html
nijam

Risposte:


27

L'opzione di configurazione che stai cercando è log_statement = "all"(se vuoi solo le istruzioni), o log_min_statement_duration = <some number>se stai semplicemente cercando query "lente" (per un valore di "lente"). Vedere http://www.postgresql.org/docs/current/static/runtime-config-logging.html per maggiori dettagli sulla configurazione della registrazione.


1
La registrazione di tutte le dichiarazioni è un killer delle prestazioni (come indicato nei documenti ufficiali). Tuttavia, 8.4 ha una bella funzionalità per ottenere explain analyzeuna query lenta al pareggio che è stato eseguito, potresti voler iniziare a testare con questo dato che 8.4 non è ancora stato rilasciato ma è una buona opzione per sapere che è successo al momento dell'esecuzione , se l'analisi spiega che l'output è OK, probabilmente stai riscontrando problemi con I / O o limiti della CPU, ma almeno saprai che non è la query stessa
serverhorror

5
Mi piace molto l'opzione log_statement = 'mod'. Mostra solo crea, aggiorna ed elimina e salta tutte le istruzioni selezionate. Ottimo se stai cercando di capire quale codice sta modificando un campo.
Don Kirkby,

5

Il auto_explainmodulo è molto utile per questo. Non solo registra le istruzioni, registra i loro piani di esecuzione e può anche registrare le istruzioni eseguite all'interno delle funzioni PL / PgSQL. Il successo delle prestazioni è piuttosto basso a meno che non si abiliti l'analisi, nel qual caso si incorre in un bel po 'di tempo per tutte le query.

Vedi auto_explainnella documentazione.


Si noti che "auto_explain" è un modulo, quindi non può essere eseguito sui database AWS RDS Postgres :(
johntellsall

1
@johntellsall supporta RDS auto_explain, è nella loro lista di moduli benedetti. Vedi la documentazione su docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Craig Ringer

3

Naturalmente, puoi rilevare da solo le query più lente, ma ti consiglio di usare pgFouine - un analizzatore di log PostgreSQL. È facile da installare e davvero utile.

Rapporti di esempio: qui e qui .


Ho usato pgFouine su un progetto e identificato diversi posti in cui un indice avrebbe aiutato molto le cose.
Paul Tomblin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.