Pull to refresh
138.7
Тензор
Разработчик системы СБИС

«Импортозамещаем» анализ планов PostgreSQL

Reading time4 min
Views11K

Вчера Hubert 'depesz' Lubaczewski закрыл доступ с российских IP ко всем своим сайтам, включая широко известный визуализатор планов PostgreSQL-запросов explain.depesz.com.

Но это не беда, потому что в компании "Тензор" мы разработали сервис explain.tensor.ru, функционал которого гораздо обширнее, и которым можете воспользоваться и вы.

Анализируем планы любой сложности...

Сокращенное дерево плана позволяет легко увидеть алгоритм выполнения запроса, все числовые показатели которого выводятся отдельно и акцентируются цветовыми метками пропорционально нагрузке.

Сокращенное отображение плана
Сокращенное отображение плана

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

Сводная статистика узлов
Сводная статистика узлов

Корректный анализ CTE Scan при повторных обращениях к одной и той же CTE или частичных чтениях из wCTE правильно распределяет время и ресурсы по фактически потребившим их узлам.

Распределение ресурсов CTE
Распределение ресурсов CTE

Анализ параллельных узлов суммирует, а не усредняет, время выполнения с учетом распределения по всем задействованным ядрам CPU для выявления точек дальнейшей оптимизации нагрузки на сервер.

"Параллельные" узлы
"Параллельные" узлы

Разбор дополнительных строк Planning, Execution, JIT и Settings помогает понять, насколько много ресурсов ушло на подготовку плана еще до начала его исполнения, и какие из возможных оптимизаций и параметров были использованы для запроса.

Анализ дополнительных строк
Анализ дополнительных строк

... из произвольных источников...

Разные форматы планов будут разобраны, независимо от способа их получения: из консоли с разбиением строк по ширине экрана или как часть лога вместе с запросом, в формате JSON, YAML или экспорт в виде CSV, с лишними обрамляющими кавычками, скопированными из pgAdmin, или без них.

Запрос и план в одном куске лога
Запрос и план в одном куске лога

Последние версии PostgreSQL генерируют планы с новыми типами узлов Incremental Sort, Result Cache, Async Foreign Scan и Index Skip Scan, но даже они не доставят проблем при анализе запроса.

Incremental Sort появился в v13
Incremental Sort появился в v13

Поддержка enterprise-«форков» позволяет воспользоваться всеми вариантами визуализации планов, сгенерированных не только «ванильным» PostgreSQL, но и любым из специализированных корпоративных решений на его основе: Greenplum, Citus, TimescaleDB и Amazon RedShift.

... с нескольких точек зрения...

Круговая диаграмма помогает легко определить доминирующие узлы и примерное соотношение их долей в потреблении ресурсов.

Визуализация круговой диаграммой
Визуализация круговой диаграммой

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

Визуализация "плиткой"
Визуализация "плиткой"

Диаграмма выполнения с возможностью масштабирования дает возможность целиком окинуть взглядом будущее "поле боя за производительность" и увидеть реальные зависимости узлов и «потоков» ресурсов.

"Потоки" ресурсов
"Потоки" ресурсов

... и с дополнительными удобствами

Интеллектуальные рекомендации, автоматически генерируемые на основе анализа структуры и ресурсных показателей плана, подскажут вам, в чем именно заключается проблема производительности запроса, и как ее можно легко устранить.

Интеллектуальные рекомендации
Интеллектуальные рекомендации

Персональный архив доступен только вам и содержит все анализировавшиеся вами планы, позволяя мгновенно вернуться к ним, независимо от публикации в общем архиве.

Персональный архив планов
Персональный архив планов

Дерево оптимизаций c именами планов помогает создать наиболее эффективный вариант запроса или вернуться к одному из предыдущих.

Дерево оптимизаций запроса
Дерево оптимизаций запроса

Сопоставление плана и запроса дает возможность одним кликом перейти от проблемного узла в плане к соответствующей точке в запросе и обратно, даже если они занимают по несколько экранов.

Сопоставление узла плана и элемента запроса
Сопоставление узла плана и элемента запроса

Нормализатор запросов в их единое визуальное представление с построчным профайлером позволяет с первого взгляда заметить, что именно пошло «не так».

Приведение запросов к единому виду
Приведение запросов к единому виду

А еще...

Мониторинг размера resultset для поиска запросов, которые слишком много гоняют по сети.

1405 строк по 101 байту - получается примерно 139KB к передаче
1405 строк по 101 байту - получается примерно 139KB к передаче

Подсветка значений - числовых, строковых и "атрибутных" - в развернутом виде узла, чтобы их можно было почти мгновенно заметить.

Подсветка значений в узле плана
Подсветка значений в узле плана

Отметка фильтрующих узлов поможет намного проще обнаружить точки, где отбрасываются какие-то из уже прочитанных из базы записей - у каждого такого узла слева есть метка с цветом, соответствующим доле отфильтрованного.

Отброшено 99% записей
Отброшено 99% записей

Иерархия сложных планов со множеством вложенных CTE/InitPlan/SubPlan позволяет наглядно отследить, где кончается поддерево конкретного узла, и кто является его прямыми потомками.

Сложная иерархия с двумя CTE
Сложная иерархия с двумя CTE

Мы поддержали работу сервиса не только "на русском", но и на других языках. Пока - только на английском, зато полноценно, включая и перевод рекомендательных подсказок.

А чтобы коллегу можно было оперативно подключить к анализу проблем, добавлена возможность оперативно "расшарить" ссылку на план через популярные мессенджеры, соцсети или почту.

Обсуждайте проблемный план там, где вам удобно
Обсуждайте проблемный план там, где вам удобно

Публичный API

Вы можете автоматизировать отправку планов из своих систем для их визуализации и дальнейшего анализа, используя API нашего сервиса:

curl -X POST https://explain.tensor.ru/explain \
  -H "Content-Type: application/json" \
  -d  @FILENAME
# тут FILENAME – путь к файлу, содержащему параметры вызова в виде JSON-объекта

Пользуйтесь!

Tags:
Hubs:
Total votes 38: ↑37 and ↓1+40
Comments8

Articles

Information

Website
sbis.ru
Registered
Founded
Employees
1,001–5,000 employees
Location
Россия