Come controllare / conoscere le query con il punteggio più alto


9

Vorrei raccogliere statistiche sulle query con il punteggio più alto nel mio database.

Per questo ho bisogno di sapere come posso tracciare le query in modo da poter creare viste o viste materializzate per memorizzare nella cache i risultati delle query più alte poiché ho un DB di grandi dimensioni.


1
Hai controllato qui ?
Nelz,


Per curiosità, quanto è grande? Inoltre, per "run più alto" intendi le query run più frequenti o cumulativamente più costose? E, con una visione semplice, non risparmierai nulla al riguardo.
dezso

@ Dezso: sono 300k righe nella tabella principale. Il più costoso sarebbe una priorità, ma voglio anche sapere il più spesso eseguito.
mamesaye,

Come già detto @a_horse_with_no_name .. l'estensione pg_stat_statements è probabilmente ciò di cui hai bisogno.
Joishi Bodio,

Risposte:


8

Come qualcuno ha detto nei commenti, pg_stat_statements è il modo per ottenere le statistiche. Metti questo nel tuo postgresql.conf:

shared_preload_libraries = 'pg_stat_statements'

pg_stat_statements.max = 10000
pg_stat_statements.track = all

Quindi eseguire questa query:

CREATE EXTENSION pg_stat_statements; 

Dopodiché, questa query di esempio (copiata dai documenti collegati sopra) ti fornirà le statistiche per 5 query principali da tutti i 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 ORDER BY total_time DESC LIMIT 5;

Se si desidera risultati per un singolo database , è necessario filtrare in base al dbidquale è possibile ottenere in pg_databasebase al nome db. Aggiungi questa clausola WHERE alla query sopra:

WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')

Potresti anche fare un join.

Durante il test, può essere una buona idea escludere le query dalle stesse tabelle statistiche / schema, ad esempio:

AND query not similar to '%( pg_|information_schema)%'

Esistono numerosi strumenti gratuiti e commerciali che possono aiutarti a visualizzare i dati.

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.