Self-hosted EXPLAIN: наглядно и безопасно
С момента первой же хабрапубликации о возможностях нашего сервиса визуализации планов запросов PostgreSQL explain.tensor.ru (а было это уже больше 2 лет назад) пользователи задавали резонный вопрос:»Все у вас круто, но у нас в запросах и планах есть коммерческая инфа, которую отправлять куда-то наружу низзя… Можно как-то ваш сервис развернуть на своей площадке?»
Ну, а почему бы и нет, подумали мы — тем более, некоторые пользователи уже интересовались возможностью интеграции нашего сервиса в свои системы.
«Я джва года ждал»
Зеркало на Amazon
И начать этот путь мы решили с подготовки сборки для AWS и разворота там зеркала сервиса (explain-postgresql.com), чем помогли некоторым пользователям оперативно обойти обратные блокировки (когда с рабочего места в «забугорье» закрыт доступ к части RU-ресурсов) после начала известных событий.
Self-hosted версия
Ну, а теперь мы сделали и выложили полноценные сборки для установки на RHEL/Debian, Docker Linux/Win/MacOS, k8s и AWS — можно свободно попробовать для тестов, отладки и личного использования, а вот корпоративные инсталляции, поддержка и расширенные возможности — на отдельных условиях.
Визуальные улучшения
Но основная цель нашего сервиса — наглядно показать узкие места в плане любой сложности, поэтому вот — некоторые новые возможности, которые облегчат вам анализ планов.
Навигатор
Мгновенно визуально оцениваем с помощью полоски-навигатора, сколько времени занял каждый узел. Клик — и мы стоим на нужном узле:
Навигатор по плану
Если доминируют красные сегменты — вы тратите много времени на чтение данных (Seq Scan, Index Scan, Bitmap Heap Scan, ...
), если желтые — на их обработку (Aggregate, Unique, ...
), а зеленых Join
должно быть не слишком много.
Average IO
Если в вашем плане присутствуют показатели времени, затраченного на операции ввода-вывода (атрибут I/O Timings
при включенном параметре track_io_timing), то теперь в строке итогов можно мгновенно оценить усредненные показатели скорости доступа к диску при последовательном и случайном чтении или записи.
Average IO
Если вы видите тут цифры в единицы MB/s, хотя база находится на SSD, то где-то в работе дисковой подсистемы явно есть проблема.
Дерево rows/RRbF
На tilemap-диаграмме плана появился новый режим rows — в нем вы можете мгновенно оценить, в каком сегменте плана генерируется или фильтруется чересчур много записей.
В этом режиме подсвечиваются те узлы, на которых было отброшено из-за несоответствия условию (Rows Removed by …) наибольшее количество записей, а «ширина» связи пропорциональна количеству записей, которые были переданы вверх по дереву.
Чем ярче узел и толще его «ветви», тем более пристально стоит к нему присмотреться:
Дерево rows
Тултип узла
Наводя курсор на узел в навигаторе или любой другой диаграмме, вы сразу видите все иконки рекомендаций, которые советует наш сервис:
Если это подсказка об индексе, то простого клика по ней достаточно, чтобы перейти к предлагаемым вариантам подходящих индексов.
Также для всех больших чисел в тексте узла добавлены разделители разрядов, чтобы сходу воспринимать порядок величин.