«Импортозамещаем» анализ планов PostgreSQL
Вчера Hubert 'depesz' Lubaczewski закрыл доступ с российских IP ко всем своим сайтам, включая широко известный визуализатор планов PostgreSQL-запросов explain.depesz.com.
Но это не беда, потому что в компании "Тензор" мы разработали сервис explain.tensor.ru, функционал которого гораздо обширнее, и которым можете воспользоваться и вы.
Анализируем планы любой сложности...
Сокращенное дерево плана позволяет легко увидеть алгоритм выполнения запроса, все числовые показатели которого выводятся отдельно и акцентируются цветовыми метками пропорционально нагрузке.
Сводная статистика узлов дает возможность анализировать планы из десятков тысяч строк в агрегированном виде с сортировкой по любому показателю: времени выполнения или чтения с диска, объему полученных из кэша данных или количеству отфильтрованных строк.
Корректный анализ CTE Scan при повторных обращениях к одной и той же CTE или частичных чтениях из wCTE правильно распределяет время и ресурсы по фактически потребившим их узлам.
Анализ параллельных узлов суммирует, а не усредняет, время выполнения с учетом распределения по всем задействованным ядрам CPU для выявления точек дальнейшей оптимизации нагрузки на сервер.
Разбор дополнительных строк Planning, Execution, JIT и Settings помогает понять, насколько много ресурсов ушло на подготовку плана еще до начала его исполнения, и какие из возможных оптимизаций и параметров были использованы для запроса.
... из произвольных источников...
Разные форматы планов будут разобраны, независимо от способа их получения: из консоли с разбиением строк по ширине экрана или как часть лога вместе с запросом, в формате JSON, YAML или экспорт в виде CSV, с лишними обрамляющими кавычками, скопированными из pgAdmin, или без них.
Последние версии PostgreSQL генерируют планы с новыми типами узлов Incremental Sort, Result Cache, Async Foreign Scan и Index Skip Scan, но даже они не доставят проблем при анализе запроса.
Поддержка enterprise-«форков» позволяет воспользоваться всеми вариантами визуализации планов, сгенерированных не только «ванильным» PostgreSQL, но и любым из специализированных корпоративных решений на его основе: Greenplum, Citus, TimescaleDB и Amazon RedShift.
... с нескольких точек зрения...
Круговая диаграмма помогает легко определить доминирующие узлы и примерное соотношение их долей в потреблении ресурсов.
Визуализация «плиткой» позволяет компактно оценить связь узлов в больших планах и выделить участок запроса, где возникла проблема.
Диаграмма выполнения с возможностью масштабирования дает возможность целиком окинуть взглядом будущее "поле боя за производительность" и увидеть реальные зависимости узлов и «потоков» ресурсов.
... и с дополнительными удобствами
Интеллектуальные рекомендации, автоматически генерируемые на основе анализа структуры и ресурсных показателей плана, подскажут вам, в чем именно заключается проблема производительности запроса, и как ее можно легко устранить.
Персональный архив доступен только вам и содержит все анализировавшиеся вами планы, позволяя мгновенно вернуться к ним, независимо от публикации в общем архиве.
Дерево оптимизаций c именами планов помогает создать наиболее эффективный вариант запроса или вернуться к одному из предыдущих.
Сопоставление плана и запроса дает возможность одним кликом перейти от проблемного узла в плане к соответствующей точке в запросе и обратно, даже если они занимают по несколько экранов.
Нормализатор запросов в их единое визуальное представление с построчным профайлером позволяет с первого взгляда заметить, что именно пошло «не так».
А еще...
Мониторинг размера resultset для поиска запросов, которые слишком много гоняют по сети.
Подсветка значений - числовых, строковых и "атрибутных" - в развернутом виде узла, чтобы их можно было почти мгновенно заметить.
Отметка фильтрующих узлов поможет намного проще обнаружить точки, где отбрасываются какие-то из уже прочитанных из базы записей - у каждого такого узла слева есть метка с цветом, соответствующим доле отфильтрованного.
Иерархия сложных планов со множеством вложенных CTE/InitPlan/SubPlan позволяет наглядно отследить, где кончается поддерево конкретного узла, и кто является его прямыми потомками.
Мы поддержали работу сервиса не только "на русском", но и на других языках. Пока - только на английском, зато полноценно, включая и перевод рекомендательных подсказок.
А чтобы коллегу можно было оперативно подключить к анализу проблем, добавлена возможность оперативно "расшарить" ссылку на план через популярные мессенджеры, соцсети или почту.
Публичный API
Вы можете автоматизировать отправку планов из своих систем для их визуализации и дальнейшего анализа, используя API нашего сервиса:
curl -X POST https://explain.tensor.ru/explain \
-H "Content-Type: application/json" \
-d @FILENAME
# тут FILENAME – путь к файлу, содержащему параметры вызова в виде JSON-объекта
Пользуйтесь!