Ако плановникът на заявки взема лоши решения, това е най-вече едно от двете неща:
1. Статистиката са неточни.
Изпълнявате ли ANALYZE
достатъчно? Също така популярен в своята комбинирана форма VACUUM ANALYZE
. Ако автоматичното вакуумиране е включено (което е по подразбиране в съвременния Postgres), ANALYZE
се стартира автоматично. Но помислете за:
- Редовният ВАКУУМЕН АНАЛИЗ все още ли се препоръчва съгласно 9.1?
Ако масата ви е голяма и разпределението на данните е неправилно , повишаване на default_statistics_target
може да помогне. Или по-скоро просто задайте целта на статистиката за съответните колони (тези в WHERE
или JOIN
клаузи на вашите заявки, основно):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Целта може да бъде зададена в диапазона от 0 до 10000;
Изпълнете ANALYZE
отново след това (на съответните таблици).
2. Настройките на разходите за плановик прогнозите са изключени.
Прочетете главата Разходни константи на Planner в ръководството.
Вижте главите default_statistics_target и random_page_cost на тази като цяло полезна страница на PostgreSQL Wiki.
Има много други възможни причини, но това са най-често срещаните.