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 IOAverage IO

Если вы видите тут цифры в единицы MB/s, хотя база находится на SSD, то где-то в работе дисковой подсистемы явно есть проблема.

Дерево rows/RRbF

На tilemap-диаграмме плана появился новый режим rows — в нем вы можете мгновенно оценить, в каком сегменте плана генерируется или фильтруется чересчур много записей.

В этом режиме подсвечиваются те узлы, на которых было отброшено из-за несоответствия условию (Rows Removed by …) наибольшее количество записей, а «ширина» связи пропорциональна количеству записей, которые были переданы вверх по дереву.

Чем ярче узел и толще его «ветви», тем более пристально стоит к нему присмотреться:

Дерево rowsДерево rows

Тултип узла

Наводя курсор на узел в навигаторе или любой другой диаграмме, вы сразу видите все иконки рекомендаций, которые советует наш сервис:

b30e606d5f5ebd8fe6f625e5e92ed670.png

Если это подсказка об индексе, то простого клика по ней достаточно, чтобы перейти к предлагаемым вариантам подходящих индексов.

Также для всех больших чисел в тексте узла добавлены разделители разрядов, чтобы сходу воспринимать порядок величин.

ce62de7cc5a560246202edd002f642fe.png

© Habrahabr.ru