Визуализатор EXPLAIN, который находит медленное место.
Вставьте план EXPLAIN из Postgres или MySQL в формате JSON, и визуализатор EXPLAIN в LetDraw нарисует его деревом: по блоку на каждый узел плана со стоимостью, числом строк и временем. Тепловая карта окрашивает каждый узел по времени или стоимости, которые он добавляет сам, так что медленный шаг запроса загорается красным.
От плана запроса к картинке за четыре шага
Выполните EXPLAIN в формате JSON, вставьте результат и читайте дерево вместо стены текста.
Получите план в JSON
В Postgres выполните EXPLAIN (FORMAT JSON) перед запросом или EXPLAIN (ANALYZE, FORMAT JSON) для реальных замеров времени. В MySQL используйте EXPLAIN FORMAT=JSON.
Вставьте его в «Создать из кода»
Откройте «Создать из кода» (функция Pro) в меню «Другие инструменты» и вставьте. План распознаётся автоматически, и сразу появляется предпросмотр.
Читайте тепловую карту
Зелёные узлы добавляют мало, красные больше всего. Расположите дерево сверху вниз или слева направо, как удобнее читать.
Подпишите и поделитесь
Вставьте дерево, добавьте к красному блоку заметку с вашим исправлением, затем поделитесь ссылкой или экспортируйте в PNG, SVG или PDF.
Тепловая карта по собственному времени узла, а не по суммам
Postgres сообщает стоимость и время накопительно, поэтому корень плана всегда выглядит самым дорогим. Этот визуализатор EXPLAIN вычитает дочерние узлы и окрашивает каждый узел по тому, что он добавляет сам, от зелёного через янтарный к красному. В каждом блоке видны тип узла и таблица, индекс или функция, с которыми он работает, а также стоимость, число строк и, с ANALYZE, время в миллисекундах по всем циклам.
- Postgres EXPLAIN в формате JSON, с ANALYZE или без
- MySQL EXPLAIN FORMAT=JSON: каждая таблица с типом доступа, стоимостью и числом строк
- Работает в вашем браузере, поэтому план и имена ваших таблиц остаются на вашем компьютере
Планы медленных запросов, которые легко обсуждать
Сырой план один человек расшифровывает в одиночку; цветное дерево понимает вся команда.
Разбор медленных запросов
Найдите последовательное сканирование или дорогой JOIN за секунды, а не листая вложенный JSON.
До и после индекса
Вставьте оба плана на один холст и покажите, какой именно узел стал из красного зелёным.
Код-ревью
Приложите план нового запроса к pull request, чтобы ревьюеры видели его стоимость, а не только SQL.
Отчёты об инцидентах
Экспортируйте дерево с тепловой картой в PNG, SVG или PDF и покажите виновника прямо в постмортеме.
Работа разработчиков и DBA
Поделитесь одной доской, где обе стороны комментируют одни и те же узлы плана в реальном времени.
Изучение планировщика запросов
Посмотрите, как соединения, сканирования и сортировки вложены друг в друга и почему планировщик выбрал именно их.
Визуализатор EXPLAIN: частые вопросы
Какой вывод EXPLAIN можно вставить?
Стоит ли использовать EXPLAIN ANALYZE?
Покидает ли мой план запроса браузер?
Это бесплатно?
Другие способы построить диаграмму из кода
Пусть узкое место покажет себя само.
Откройте LetDraw, вставьте план EXPLAIN в формате JSON и посмотрите, на что запрос тратит время.