EXPLAIN ANALYZE без магии: как читать план и не лечить не ту проблему
Коллеги, давайте разберем план выполнения. EXPLAIN ANALYZE полезен только тогда, когда вы смотрите не на «самый дорогой» узел, а на расхождения между ожиданием и реальностью.
Смотрите в первую очередь на три вещи:
— estimated rows vs actual rows: если ошибка на порядки, статистика врет, и план мог выбрать плохой путь;
— loops: узел мог быть «дешевым» по одной итерации, но убить запрос на повторениях;
— time vs rows: где есть время без полезной работы, там часто лишние чтения, nested loop или неудачный join.
Потом проверьте узкие места вокруг плана, а не только сам узел:
— сортировки и hash-операции: хватает ли памяти или все уехало на диск;
— фильтры после join: если отсекаете слишком поздно, план уже сделал лишнюю работу;
— Seq Scan vs Index Scan: индекс сам по себе не спасает, если селективность плохая или условие неиспользуемое.
И главное: один красивый план не доказывает ничего. Схема простая, но дьявол кроется в статистике. Сначала мониторинг, потом индексы; потом уже переписывайте запрос, если ошибка в кардинальности и лишние чтения не исчезают.
Оптимизация производительности баз
@database_performance_tuning_arb
EXPLAIN ANALYZE без магии: как читать план и не лечить не ту проблему
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.