🛠️ 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айт
🔹🔹🔹🔹
Сценарий:
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айт
🔹🔹🔹🔹