PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Impedisci a PostgreSQL di scegliere a volte un piano di query errato

Se il pianificatore di query prende decisioni sbagliate, è principalmente una delle due cose:

1. Le statistiche sono imprecisi.

Esegui ANALYZE abbastanza? Popolare anche nella sua forma combinata VACUUM ANALYZE . Se l'autovacuum è attivo (che è l'impostazione predefinita nel Postgres moderno), ANALYZE viene eseguito automaticamente. Ma considera:

  • Le normali ANALISI DEL VUOTO sono ancora consigliate sotto 9.1?

Se il tuo tavolo è grande e la distribuzione dei dati è irregolare , aumentando il default_statistics_target posso aiutare. O meglio, imposta semplicemente il target delle statistiche per le colonne pertinenti (quelle in WHERE o JOIN clausole delle tue domande, in pratica):

ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400;  -- calibrate number

Il target può essere impostato nell'intervallo da 0 a 10000;

Esegui ANALYZE di nuovo dopo (sulle tabelle pertinenti).

2. Le impostazioni dei costi per il pianificatore i preventivi sono disattivati.

Leggere il capitolo Costanti di costo del pianificatore nel manuale.

Guarda i capitoli default_statistics_target e costo_pagina_casuale su questa pagina Wiki di PostgreSQL generalmente utile.

Ci sono molte altre possibili ragioni, ma queste sono di gran lunga le più comuni.