Postgres и MySQL

Визуали­затор EXPLAIN, который находит медленное место.

Вставьте план EXPLAIN из Postgres или MySQL в формате JSON, и визуализатор EXPLAIN в LetDraw нарисует его деревом: по блоку на каждый узел плана со стоимостью, числом строк и временем. Тепловая карта окрашивает каждый узел по времени или стоимости, которые он добавляет сам, так что медленный шаг запроса загорается красным.

Запрос · EXPLAIN ANALYZE
Sort cost 1290 rows 120 52.6 ms Nested Loop cost 1240 rows 120 49.8 ms Seq Scan · orders cost 912 rows 4800 38.2 ms Index Scan · users cost 8 rows 1 9.6 ms быстрее дольше
Шаг за шагом

От плана запроса к картинке за четыре шага

Выполните EXPLAIN в формате JSON, вставьте результат и читайте дерево вместо стены текста.

  1. Получите план в JSON

    В Postgres выполните EXPLAIN (FORMAT JSON) перед запросом или EXPLAIN (ANALYZE, FORMAT JSON) для реальных замеров времени. В MySQL используйте EXPLAIN FORMAT=JSON.

  2. Вставьте его в «Создать из кода»

    Откройте «Создать из кода» (функция Pro) в меню «Другие инструменты» и вставьте. План распознаётся автоматически, и сразу появляется предпросмотр.

  3. Читайте тепловую карту

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

  4. Подпишите и поделитесь

    Вставьте дерево, добавьте к красному блоку заметку с вашим исправлением, затем поделитесь ссылкой или экспортируйте в PNG, SVG или PDF.

Куда на самом деле уходит время

Тепловая карта по собственному времени узла, а не по суммам

Postgres сообщает стоимость и время накопительно, поэтому корень плана всегда выглядит самым дорогим. Этот визуализатор EXPLAIN вычитает дочерние узлы и окрашивает каждый узел по тому, что он добавляет сам, от зелёного через янтарный к красному. В каждом блоке видны тип узла и таблица, индекс или функция, с которыми он работает, а также стоимость, число строк и, с ANALYZE, время в миллисекундах по всем циклам.

  • Postgres EXPLAIN в формате JSON, с ANALYZE или без
  • MySQL EXPLAIN FORMAT=JSON: каждая таблица с типом доступа, стоимостью и числом строк
  • Работает в вашем браузере, поэтому план и имена ваших таблиц остаются на вашем компьютере
Попробовать
EXPLAIN (ANALYZE, FORMAT JSON) SELECT * FROM orders o JOIN users u ON ...; [{ "Plan": { "Node Type": "Nested Loop", "Actual Total Time": 49.8, "Plans": [ ... ] }}] -- MySQL: EXPLAIN FORMAT=JSON Nested Loop 49.8 ms Seq Scan orders Index Scan users 38.2 ms тут
Для чего это используют

Планы медленных запросов, которые легко обсуждать

Сырой план один человек расшифровывает в одиночку; цветное дерево понимает вся команда.

Разбор медленных запросов

Найдите последовательное сканирование или дорогой JOIN за секунды, а не листая вложенный JSON.

До и после индекса

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

Код-ревью

Приложите план нового запроса к pull request, чтобы ревьюеры видели его стоимость, а не только SQL.

Отчёты об инцидентах

Экспортируйте дерево с тепловой картой в PNG, SVG или PDF и покажите виновника прямо в постмортеме.

Работа разработчиков и DBA

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

Изучение планировщика запросов

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

Вопросы

Визуализатор EXPLAIN: частые вопросы

Какой вывод EXPLAIN можно вставить?
Postgres EXPLAIN (FORMAT JSON), с ANALYZE или без, и MySQL EXPLAIN FORMAT=JSON. Обычный текстовый вывод EXPLAIN не поддерживается, поэтому запрашивайте JSON.
Стоит ли использовать EXPLAIN ANALYZE?
Да, если вы можете позволить себе выполнить запрос. С ANALYZE тепловая карта следует измеренному времени; без него цвета следуют оценочной стоимости планировщика.
Покидает ли мой план запроса браузер?
Нет. План разбирается и раскладывается полностью в вашем браузере. Сохраняется только вставленная вами диаграмма, как любой другой рисунок.
Это бесплатно?
«Создать из кода», функция, которая превращает план EXPLAIN в диаграмму, входит в Pro и Enterprise. Тариф Free всё равно даёт полный холст, все типы диаграмм и экспорт в PNG, SVG и PDF, без банковской карты.

Пусть узкое место покажет себя само.

Откройте LetDraw, вставьте план EXPLAIN в формате JSON и посмотрите, на что запрос тратит время.