pg_stat_statements: query principali
Abiliti pg_stat_statements, trovi le query più pesanti in base al tempo totale e le ottimizzi in modo mirato.
pg_stat_statements: query principali è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Cosa offre pg_stat_statements
Un registro cumulativo di ogni query, normalizzato in base alla struttura: è lo strumento DBA più utile in PostgreSQL.
Abilitarlo
È un'estensione contrib. La aggiunga a shared_preload_libraries e riavvii:
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;Query principali per tempo totale
La query "dove va la mia CPU":
SELECT calls,
total_exec_time,
mean_exec_time,
rows,
query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Query lente per chiamata
Query lente a ogni chiamata:
SELECT mean_exec_time, calls, query
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC
LIMIT 20;Query frequenti e poco costose
Anche un milione di query da 1 ms rappresenta un problema:
SELECT calls, mean_exec_time, total_exec_time, query
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 20;Normalizzazione
pg_stat_statements raggruppa le query in base alla struttura normalizzata: i valori letterali vengono sostituiti da $N. In questo modo "SELECT * FROM users WHERE id = 1" e "= 2" diventano la stessa riga.
Azzerare le statistiche
Riparta da zero dopo un deployment per misurare il nuovo comportamento:
SELECT pg_stat_statements_reset();Tempo I/O vs CPU
Le versioni più recenti di PG separano il tempo di esecuzione. shared_blks_hit / shared_blks_read indicano se i dati provengono dalla cache o dal disco:
SELECT query, shared_blks_hit, shared_blks_read,
shared_blks_read::FLOAT / NULLIF(shared_blks_hit + shared_blks_read, 0) AS read_ratio
FROM pg_stat_statements
ORDER BY shared_blks_read DESC LIMIT 20;JIT e tempo di pianificazione
PG 13+ espone total_plan_time. Alcune query impiegano più tempo nella PIANIFICAZIONE che nell'esecuzione: di solito è un segnale che indica l'opportunità di usare prepared statement.
Statistiche per database / per utente
pg_stat_statements è attivo a livello di cluster. Filtri le colonne dbid e userid per ottenere viste per database / per utente.
Combinare con EXPLAIN ANALYZE
pg_stat_statements indica QUALI query sono lente. EXPLAIN ANALYZE indica PERCHÉ.
Avvertenze
- L'accumulo per database e per utente può nascondere i problemi: consideri il totale
- Non tiene traccia del tempo per riga, ma solo del totale per chiamata
- Si azzera al riavvio o dopo una chiamata di reset
Riepilogo
pg_stat_statements è indispensabile in produzione.
- Prime query per tempo totale → i miglioramenti più rilevanti
- Prime query per media → lentezza costante
- Prime query per numero di chiamate → problema di frequenza
- Le combini con EXPLAIN per individuare le correzioni
Verifica rapida
Ha abilitato pg_stat_statements. Quale query offre i maggiori margini di miglioramento delle prestazioni da analizzare?
Domande Frequenti
La lezione «pg_stat_statements: query principali» è gratuita?
Sì — il testo completo di «pg_stat_statements: query principali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «pg_stat_statements: query principali»?
Abiliti pg_stat_statements, trovi le query più pesanti in base al tempo totale e le ottimizzi in modo mirato. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «pg_stat_statements: query principali»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- pg_stat_statements: query principali
- pgBadger per l’analisi dei log
- Pooling delle connessioni: PgBouncer
- Pianificazione della capacità e audit del bloat