Pokud plánovač dotazů dělá špatná rozhodnutí, je to většinou jedna ze dvou věcí:
1. statistiky jsou nepřesné.
Spouštíte ANALYZE
dost? Populární také ve své kombinované formě VACUUM ANALYZE
. Pokud je zapnuté automatické vysávání (což je výchozí nastavení v moderním Postgresu), ANALYZE
se spouští automaticky. Ale zvažte:
- Doporučuje se stále pravidelná VACUUM ANALYZE pod 9.1?
Pokud je váš stůl velký a distribuce dat je nepravidelná , čímž se zvýší default_statistics_target
může pomoci. Nebo spíše jen nastavte cíl statistik pro relevantní sloupce (ty v WHERE
nebo JOIN
klauzule vašich dotazů, v podstatě):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Cíl lze nastavit v rozsahu 0 až 10 000;
Spusťte ANALYZE
poté znovu (na příslušných tabulkách).
2. Nastavení ceny protože odhady plánovače jsou vypnuté.
Přečtěte si kapitolu Konstanty nákladů plánovače v příručce.
Podívejte se na kapitoly default_statistics_target a random_page_cost na této obecně užitečné stránce PostgreSQL Wiki.
Existuje mnoho dalších možných důvodů, ale tyto jsou zdaleka nejběžnější.