0Pricing
SQL Academy · Lezione

ANALYZE e pg_statistic

Mantenga aggiornate le statistiche del planner con ANALYZE, esamini pg_statistic e utilizzi statistiche estese per colonne correlate.

ANALYZE e pg_statistic è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Perché ANALYZE?

Il query planner deve stimare il numero di righe e la selettività per scegliere un buon piano. Queste stime derivano dalle statistiche per colonna raccolte da ANALYZE.

Quando eseguire ANALYZE

Autovacuum esegue ANALYZE automaticamente in base alle soglie di modifica delle righe. Dopo caricamenti massivi o grandi DELETE, lo esegua manualmente per evitare che i piani peggiorino:

ANALYZE orders;
ANALYZE (VERBOSE) orders;

Campionamento

ANALYZE campiona alcune centinaia di righe per colonna. Modifichi il target delle statistiche se i valori predefiniti producono stime errate:

ALTER TABLE orders ALTER COLUMN customer_id SET STATISTICS 1000;
-- Up from default 100. ANALYZE will sample more rows.

pg_statistic

Il catalogo di sistema in cui sono memorizzate le statistiche (utilizzi la vista pg_stats per una lettura più chiara):

SELECT attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds
FROM pg_stats
WHERE schemaname = 'public' AND tablename = 'orders';

Cosa osserva il planner

  • n_distinct — quanti valori distinti sono presenti
  • most_common_vals — i valori più frequenti e le relative frequenze
  • histogram_bounds — intervalli per le query su intervalli
  • correlation — ordine fisico rispetto a quello logico (influisce sul costo della scansione)

Statistiche estese

Le statistiche per colonna non rilevano le correlazioni tra colonne. CREATE STATISTICS le acquisisce:

CREATE STATISTICS orders_country_status (dependencies)
  ON country, status FROM orders;
ANALYZE orders;

-- Now the planner knows that  country='US' AND status='paid' is correlated
-- (e.g. most US orders happen to be 'paid').

Tipi di statistiche multivariate

  • dependencies — dipendenze funzionali (una colonna predice l'altra)
  • ndistinct — combinazioni di valori distinti
  • mcv — combinazioni di valori più frequenti (PG 12+)

Stime errate → piani errati

Il motivo più comune per cui una query è lenta è rappresentato da stime errate del numero di righe. Il planner sceglie Nested Loop perché prevede 1 riga, mentre nella realtà ce ne sono 1.000.000.

EXPLAIN ANALYZE SELECT * FROM ... ;
-- Look at Plan rows vs actual rows. Big gap = run ANALYZE or add extended stats.

Forzare ANALYZE nelle migrazioni

Dopo un grande caricamento massivo:

COPY users FROM ... ;
ANALYZE users;
-- Without ANALYZE, the planner has no idea the table just grew.

Le statistiche non si aggiornano automaticamente in caso di skew dei dati

Se i dati di oggi sono molto diversi da quelli di ieri, le statistiche potrebbero restare obsolete finché non viene eseguito l'autoanalyze. Esegua ANALYZE manualmente dopo i cambiamenti nella forma dei dati.

pg_class.reltuples

Il planner utilizza anche il numero stimato di righe proveniente da pg_class. Questo valore viene aggiornato da VACUUM e ANALYZE. Può verificarlo rapidamente:

SELECT relname, reltuples FROM pg_class WHERE relname = 'orders';

Riepilogo

ANALYZE fornisce dati al planner.

  • Lo esegua dopo grandi modifiche ai dati
  • Aumenti il target STATISTICS per le colonne con distribuzione asimmetrica
  • Utilizzi CREATE STATISTICS per le correlazioni tra colonne
  • Una grande differenza tra stime e valori effettivi è il primo problema da correggere

Verifica rapida

EXPLAIN ANALYZE mostra estimated rows=1 ma actual rows=500,000 per una clausola WHERE su una sola colonna. Qual è la prima correzione?

Domande Frequenti

La lezione «ANALYZE e pg_statistic» è gratuita?

Sì — il testo completo di «ANALYZE e pg_statistic» è 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 «ANALYZE e pg_statistic»?

Mantenga aggiornate le statistiche del planner con ANALYZE, esamini pg_statistic e utilizzi statistiche estese per colonne correlate. 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 3 di 4.

Quanto tempo richiede la lezione «ANALYZE e pg_statistic»?

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

  1. MVCC e cause del bloat
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE e pg_statistic
  4. Scansioni solo indice e Visibility Map
← Torna a SQL Academy