🛠️ ANALYZE выполнили. Запрос стал медленнее. Почему?

Сценарий:

SQL не менялся.

Запрос работал нормально.

После ANALYZE время выполнения выросло.

Первая мысль:

«Статистика сломалась».

Но ANALYZE работает иначе.

Он обновляет статистику, которую PostgreSQL использует для оценки стоимости разных планов.

Новая статистика может привести к выбору другого плана.

И этот план не всегда окажется быстрее.

Проблема часто не в самой статистике, а в том, насколько хорошо планировщик оценил количество строк.

Проверка начинается с:

EXPLAIN ANALYZE BUFFERS

Сравните:

— старый план; — новый план; — actual time; — rows estimate; — actual rows; — прочитанные блоки.

Особое внимание:

оценка:

100 строк

факт:

500 000 строк

Такое расхождение может изменить выбор стратегии выполнения.

Типичная ошибка:

увидеть новый план и сразу добавлять индекс.

Но сначала нужно понять:

— почему изменился путь выполнения; — что изменилось в статистике; — насколько оценки совпали с реальностью.

Последовательность:

план до изменений → новый план → EXPLAIN ANALYZE BUFFERS → сравнение estimate/actual → только потом изменение настроек.

Вывод:

ANALYZE обновляет данные для планировщика, но не обещает, что каждый новый план будет быстрее.

Сначала нужно понять логику выбора PostgreSQL.

Сохраните сценарий анализа изменения плана PostgreSQL.

😄VK | 💬Макс | 🌐 Cайт 🔹🔹🔹🔹

🛠️ ANALYZE выполнили. Запрос стал медленнее. Почему?
Сценарий:
SQL не менялся.
Запрос работал нормально.
После ANALYZE время выполнения выросло.
Первая мысль:
«Статистика сломалась» | Сетка — социальная сеть от hh.ru