Профайлинг запроса (Query Profiler)

Материалы к уроку

Перейти в модуль «Query Profiler» можно находясь внутри экземпляра, через меню слева. Эта вкладка доступна пользователям с любой ролью.
Модуль «Query Profiler» предназначен для профилирования запросов. Работа данного модуля основана на сборе статистики из расширения pg_stat_statements.
Все данные из pg_stat_statements группируются особым образом, чтобы исключить дублирование для идентичных запросов.
Основной график отображает среднее время выполнения запросов, и вы можете выбрать временной интервал для анализа, который также влияет на список запросов. Система автоматически выбирает 50 самых длительных запросов для дальнейшего анализа.
Профилирование полезно, когда необходимо выявить медленно выполняющиеся запросы и их причины. Вы можете использовать функцию поиска для быстрого поиска запросов по хэшу и фильтры для сортировки запросов по различным параметрам, таким как время выполнения, количество строк, время CPU и другие.

Статистика

Кликая на сам запрос, или нажав «Details» в меню в правом хвосте, мы перейдем в запрос, на страницу «Statistics». На странице «Statistics» представлена подробная информация о запросе, включая текст запроса, его хэш, базу данных, пользователя, суммарное время выполнения, количество вызовов, среднее время выполнения, количество возвращенных строк, время CPU, время ввода/вывода и количество прочитанных и записанных блоков.
Также доступны графики для визуализации различных параметров запроса, таких как время выполнения, количество вызовов в секунду, количество возвращенных строк в секунду, время CPU и другие.

План запроса

Мы можем детально посмотреть на план запроса, находясь внутри запроса, кликнув на вкладку «Plans».

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

Один и тот же запрос может выполняться с разными планами и в разное время по каким-то определенным причинам (к примеру изменилась статистика и поэтому планировщик изменил план запроса).


Внизу гистограммы мы видим список планов запроса, если нажмем на «+», то увидим сам план.


Если мы нажимаем на сам запрос, в центре, мы проваливаемся вовнутрь.

На странице представлена информация, которая позволяет провести подробный анализ запроса:
  • информация об узлах
  • диаграмма исполнения запроса
  • соотношение между элементами
  • план в чистом виде
  • верхнеуровневая модель запроса
  • оригинал запроса из файла записи базы данных
  • рекомендации по индексам и рекомендации общие по узлам
  • статистика по выбранному плану
Со страницы «Explain», можно перейти в окно «PieChart», в нем представлена информация по узлам исполнения запроса. Понять «где болит сильнее всего» непросто, особенно, если запрос содержит несколько десятков узлов, и даже сокращенная форма плана занимает 2-3 экрана.
В «PieChart» сразу, навскидку, видна примерная доля потребления ресурсов каждым из узлов. При наведении на него, слева в текстовом представлении видно иконку у выбранного узла.
Круговая диаграмма плохо показывает отношения между разными узлами и «самые горячие» точки. Для этого гораздо лучше подойдет «Timemap» — это временная карта. Если наводить курсор на разделы карты мы увидим много полезной информации.
По умолчанию здесь мы находимся во вкладке «time», правее мы видим вкладку «cost», где отражается стоимость, и «rows» информация по строкам.
Также здесь присутствует цветовая гамма, красный узел — это индикатор, что проблема находится в этом узле.
Еще важно отметить, толщина «ножки» пропорциональна количеству записей, которые были переданы от узла к узлу.