Профилировщик запросов
Модуль Query Profiler предназначен для профилирования запросов. Работа модуля основана на сборе статистики из расширения pg_stat_statements. Все данные из pg_stat_statements группируются особым образом, чтобы исключить дублирование для идентичных запросов.
Чтобы открыть эту страницу, нажмите на «Профилировщик запросов» в левой панели меню экземпляра.
Если расширение pg_stat_statements не установлено, при переходе на страницу профилировщика запросов, появится сообщение о необходимости установки. Установить расширение можно по инструкции.
Если расширение не активировано или не настроены параметры СУБД, Платформа предложит автоматическую настройку.
На каждой итерации сбора статистической информации делается выборка только 50 самых длительных запросов, все остальные группируются в блок other.
Рассмотрим функционал модуля, согласно нумерации, обозначенной на рисунке выше:
График отображает среднее время выполнения запросов. Выпадающий список в правом верхнем углу дает возможность выбрать временной интервал, за который необходимо показать информацию. Выбранный интервал времени также влияет на список запросов ниже. Доступно семь временных интервалов:
Поиск по хэшу запроса.
Сортировка запросов:
Фильтр, позволяющий выполнить фильтрацию по базам данных.
Символ «+» открывает подстроку, чтобы увидеть сам запрос.
Меню с опцией «Подробнее» для детального рассмотрения запроса.
Для просмотра детальной информации кликните на строку запроса или выберите в контекстном меню «Подробнее».
Вкладка «Статистика»
После перехода к детальной информации по запросу откроется вкладка «Статистика».
Рассмотрим вкладку подробнее, согласно нумерации, обозначенной на рисунке выше:
График отображает данные за определенный временной интервал. Вы можете выбрать один из семи вариантов временного интервала:
Можно просмотреть шесть графиков. Чтобы переключиться между ними, нажмите на точки.
Time Query/Second,
Calls/Second,
Rows/Second,
CPU Time/ Second,
IO Time/Second,
Dirtied Blocks/Second,
Temp Blocks(Write)/Second.
Текст запроса можно скопировать в буфер обмена.
Вкладка «Планы»
Для работы с планами запросов установите расширение pg_store_plans. Если расширение pg_store_plans не установлено, при переходе на страницу профилировщика запросов, появится сообщение о необходимости установки. Инструкция по установке находится на странице «Установка и настройка расширения pg_store_plans».
Если расширение не активировано или не настроены параметры СУБД, Платформа предложит автоматическую настройку.
Данные об использовании планов запросов представлены в формате гистограмм. Каждый план отображается уникальным цветом. Высота столбца в гистограмме по каждому из планов зависит от количества вызовов данного плана.
Рассмотрим вкладку подробнее, согласно нумерации, обозначенной на рисунке выше:
Вы можете выбрать один из семи вариантов временного интервала:
Символ «+» открывает план выполнения, используемый для выбранного запроса.
Анализатор планов запросов
Анализатор планов запросов интегрирован в платформу Tantor на основе сервиса https://explain.tensor.ru. Эта интеграция позволяет пользователю проводить анализ запросов и логов базы данных в рамках платформы Tantor и не требует отправки запросов и данных, находящихся в них, во внешние сервисы. Более того, платформа Tantor собирает и хранит запросы в соответствии с установленной конфигурацией, существенно облегчая поиск запросов по таким параметрам, как время запроса, количество строк и многое другое.
Конфигурация
Для корректной работы установите следующие расширения:
pg_stat_statements, который поставляется в каталоге contrib дистрибутива PostgreSQL и Tantor DB всех версий;
pg_store_plans сборки Tantor (отличается от находящегося в общем доступе).
Методы доступа
Существует три метода доступа к анализатору планов запросов.
Доступ из верхнего меню:
Доступ из экрана «Обзор» экземпляра через запрос «ТОП-5 запросов по общему времени выполнения».
Доступ через экран Queries.
Этот метод позволяет проанализировать запрос, который попал в Top 50 запросов, которые собирает и анализирует платформа. Чтобы открыть анализатор запросов, выполните следующие действия:
нажмите на «Профилировщик запросов»:
нажмите на нужный запрос:
откроется страница со статистикой по запросу:
перейдите на вкладку «Планы»:
на открывшейся странице нажмите на интересующий вас план. Откроется страница с анализом плана:
Основные компоненты
Навигатор [1]
Позволяет оценить с помощью полоски-навигатора, сколько времени занял каждый узел. При нажатии на него произойдет переход на нужный узел:
Если доминируют красные сегменты — вы тратите много времени на чтение данных (Seq Scan, Index Scan, Bitmap Heap Scan), если желтые — на их обработку (Aggregate, Unique), а зеленых Join должно быть не слишком много.
Average IO [1]
Если в вашем плане присутствуют показатели времени, затраченного на операции ввода-вывода (атрибут I/O Timings при включенном параметре track_io_timing), то теперь в строке итогов можно мгновенно оценить усредненные показатели скорости доступа к диску при последовательном и случайном чтении или записи:
Предупреждение
Если вы видите тут цифры в единицы MB/s, хотя база находится на SSD, то где-то в работе дисковой подсистемы явно есть проблема.
Дерево rows/RRbF [1]
На tilemap-диаграмме плана режим rows позволяет мгновенно оценить, в каком сегменте плана генерируется или фильтруется чересчур много записей.
В этом режиме подсвечиваются те узлы, на которых из-за несоответствия условию (Rows Removed by …) было отброшено наибольшее количество записей. «Ширина» связи пропорциональна количеству записей, которые были переданы вверх по дереву.
Чем ярче узел и толще его «ветви», тем больше внимания на него нужно обратить:
Тултип узла [1] [2]
Наводя курсор на узел в навигаторе или любой другой диаграмме, вы сразу видите все иконки рекомендаций, которые советует сервис:
Если это подсказка об индексе, то простого клика по ней достаточно, чтобы перейти к предлагаемым вариантам подходящих индексов.
Также для всех больших чисел в тексте узла добавлены разделители разрядов, чтобы сходу воспринимать порядок величин.
Круговая диаграмма [2]
Понять «где болит сильнее всего» непросто, особенно, если запрос содержит несколько десятков узлов, и даже сокращенная форма плана занимает 2-3 экрана. В этом случае на помощь придет круговая диаграмма:
Сразу, навскидку, видна примерная доля потребления ресурсов каждым из узлов. При наведении на него слева в текстовом представлении отображается иконка у выбранного узла.
Диаграмма выполнения [2]
Тултип узла и круговая диаграмма не показывают полную цепочку вложений служебных узлов CTE/InitPlain/SubPlan — его можно увидеть только на диаграмме реального выполнения:
Источник