EXPLAIN
(ANALYZE, BUFFERS) ...
любимый инструмент познания
особенностей работы этой СУБД, то новые полезные фишки нашего
сервиса визуализации и анализа планов explain.tensor.ru
наверняка пригодятся вам в этом нелегком деле.Но сразу напомню, что без полноценного всестороннего мониторинга базы PostgreSQL использовать только анализ плана это выступать с позиции мудреца #5!
[источник КДПВ, Слепые и слон]
Самуил Маршак, 1940
Ученый спор
Слепцы, числом их было пять,
В Бомбей явились изучать
Индийского слона.
Исследовав слоновий бок,
Один сказал, что слон высок
И прочен, как стена.
Другой по хоботу слона
Провел рукой своей
И заявил, что слон одна
Из безопасных змей.
Ощупал третий два клыка,
И утверждает он:
На два отточенных штыка
Похож индийский слон!
Слепец четвертый, почесав
Колено у слона,
Установил, что слон шершав,
Как старая сосна.
А пятый, подойдя к слону
Со стороны хвоста,
Определил, что слон в длину
Не больше чем глиста.
Возникли распри у слепцов
И длились целый год.
Потом слепцы в конце концов
Пустили руки в ход.
А так как пятый был силен,
Он всем зажал уста.
И состоит отныне слон
Из одного хвоста!
Итак, сегодня в программе:
- меняем шевроны на погоны
- сводим мега-планы
- ведем персональный архив
- изучаем генеалогию планов
- всматриваемся в окна
Не цветом единым!
Исторически, при просмотре плана самые горячие узлы мы отмечали вертикальным шевроном слева от значения чем больше значение, тем насыщеннее цвет.
Но в такой модели плохо воспринимается соотношение величин например, отклонение на 30% по разнице в оттенках может заметить только натренированный глаз. Поэтому мы сделали гистограмму из горизонтальных погонов.
Полезная статистика для мега-планов
Многие не замечают у плана вкладку Статистика, вот она справа:
А кто и заметил вряд ли активно пользовался. Мы решили исправить это упущение, и сделать ее действительно полезной для анализа крупногабаритных планов (100+ узлов).
Группировка узлов
Все одинаковые узлы плана (то есть те, у которых совпадают тип узла, использованная таблица и индекс) группируются в одну строку таблицы. При этом все их показатели (время выполнения, количество прочитанных и отброшенных записей, общее число проходов и объем прочитанных данных) суммируются.
А для наглядности каждый тип узла несет цветовую метку:
-
красная чтение данных
узлыSeq Scan
,Index Scan
,CTE Scan
и разные другие... Scan
-
желтая обработка данных
узлыSort
,Unique
,Aggregate
,Group
,Materialize
, ... -
зеленая соединения
узлыNested Loop
,Merge Join
,Hash Join
, ...
Сортировка по любому показателю
Если вдруг вам требуется анализ не по суммарному времени, а типу узла, например просто кликните по заголовку столбца и все будет:
Контекстная подсказка узла
Чтобы детально понять вклад конкретного узла в группе, наведите на номер любого из них и увидите традиционную подсказку, что конкретно там происходило:
Персональный архив планов
Без регистрации и SMS!Если вы активно пользуетесь нашим сервисом, то теперь найти свои ранее анализировавшиеся планы будет гораздо легче достаточно переключиться на вкладку мои в архиве. Сюда планы попадают независимо от публикации в общем архиве и видны только вам.
Генеалогия планов
Раньше найти в архиве какой-то конкретный из своих планов было достаточно сложно, теперь просто. Их можно именовать и группировать в генеалогическое древо оптимизаций!
Просто укажите имя при добавлении плана:
или на уже существующем плане вы можете задать его, отредактировать или добавить связанный план:
Тогда можно будет оперативно переключаться по всему дереву вариантов, чтобы оценить эффект от тех или иных оптимизаций:
А если ссылка на конкретный план вдруг потерялась, его можно легко опознать по имени в персональном архиве:
Всматриваемся в окна
Небольшое, но полезное усовершенствование Query Profiler, о котором я писал ранее мы научили его заглядывать в окна и правильно сопоставлять с узлами плана:
-> WindowAgg ==> WINDOW / OVER -> Sort ==> PARTITION BY / ORDER BY
как несколько независимых определений окна (
WINDOW
) в
рамках одного запроса:так и сортировки в оконных функциях без явного определения:
Удачной охоты на разные неэффективности!