Оптимизация производительности баз

EXPLAIN ANALYZE: как не перепутать медленный SQL с дорогим планом

EXPLAIN ANALYZE: как не перепутать медленный SQL с дорогим планом

Коллеги, давайте разберем план выполнения. EXPLAIN без факта показывает, что оптимизатор задумал. EXPLAIN ANALYZE добавляет реальность: сколько строк прошло, сколько времени заняла каждая операция, где план «поехал».

Смотрите в первую очередь на три вещи:
— расхождение estimated rows и actual rows; если промах в разы, статистика или селективность врут
— узкие места по времени: Seq Scan, Sort, Hash Join, Nested Loop с большим числом повторов
— I/O и буферы: если все упирается в чтение с диска, индексы могут не спасти

Типовая ошибка — лечить верхний узел плана, когда проблема ниже. Если Nested Loop выглядит страшно, проверьте, что внутри: иногда один лишний Seq Scan на маленькой таблице дешевле, чем «красивый» индексный доступ с тысячами случайных чтений. Золотое правило: сначала мониторинг, потом индексы.

Схема простая, но дьявол кроется в статистике: хороший план на малых данных может развалиться на реальном объеме. Поэтому сравнивайте план с фактом после изменений в данных, а не только после правок SQL.

Итог: EXPLAIN ANALYZE полезен только вместе с пониманием данных, статистики и I/O; иначе это просто красивый отчет о том, как база ошиблась.
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.