Страница /Планы

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

Порядок перехода на страницу /Планы

На эту страницу можно попасть, нажав на ссылку «Проблемные запросы» в бургер-меню.

Панель управления страницей

Откроется основная страница данного раздела. Из элементов её управления, которые не встречались ранее - можно установить два режима:

  • cmp

  • sum

Рассмотрим вкладки данной страницы.

Вкладка «По шаблонам»

В этой вкладке находится вся информация по запросам, отсортированная по шаблонам, а также основные параметры шаблонов. Шаблон - сокращённое представление плана, в котором выделены основные тезисы плана со скрытой их детализацией.

Информация представлена в таблице, содержащей следующие столбцы:

  • шаблон - идентификационный номер шаблона в шестнадцатиричной системе счисления.

  • метод - методы PostgreSQL, предоставляющие аналитику на данной странице. На представленном выше скриншоте во всех строках таким методом является «pgbench» - программа для запуска тестов производительности PostgreSQL. Он выполняет одну и ту же последовательность команд SQL снова и снова, возможно, в нескольких одновременных сеансах базы данных, а затем вычисляет среднюю скорость транзакций (транзакций в секунду).

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

  • кол-во - количество строк, возвращённое запросом.

  • sum, mc - суммарное время, складывающееся из времени выполнения запросов с этим шаблоном и времени на передачу данных. Этот показатель продоставляет информацию об использовании процессора.

  • avg, mc - среднее суммарное время на выполнение одного запроса.

  • buf:mem - общий объём памяти в страницах, который «пробежали» запросы с данным шаблоном (не тот объём памяти, который они себе выделили).

  • buf:dsk - показывает в страницах данных (обычно, одна страница - это 8192 байта памяти) количество памяти, используемое конкретным шаблоном (чтобы понять, сколько данных использовал один запрос, нужно поделить значение этого столбца на количество запросов)

  • % - показывает долю значения 8го столбца от 7го в процентном соотношении.

  • last - время, в которое происходил последний запрос с этим шаблоном. Если нажать на значение этого столбца, вы попадёте на страницу «Запрос из архива» (здесь должнна быть ссылка), где будет представлен более подробный анализ данного запроса.

  • Timeline - столбчатая диаграмма, показывающая, как растёт нагрузка по определённому шаблону с течением времени. Цвет показывает относительную длительность запросов. Если запросы быстрые, то они зелёного цвета, менее быстрые - жёлтого, а самые медленные, соответственно, красного цвета. Высота полосок диаграммы - это количество запросов в данном промежутке времени. В каждой полоске 10 минут. Во всей длине одной диаграммы находятся одни сутки, разделённые на секции по часам.

Если щёлкнуть по заголовку какого-либо столбца, по нему произведётся сортировка всей таблицы.

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

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

Страница имеет 4 вкладки. Во вкладке «Шаблон» наверху представлен тот же самый шаблон запроса, что и на предыдущей странице.

Внизу находится таблица со столбцами:

  • time - время исполнения данного запроса.

  • приложение - снова метод, при помощи которого собирались метрики.

  • rows - количество возвращённых строк.

  • RRbF - rows removed by filter.

  • buf:mem - общий объём памяти в страницах, который «пробежал» данный запрос.

  • buf:dsk - объём памяти в страницах, используемый конкретным запросом.

  • план - планируемое время выполнения запроса (результат команды EXPLAIN <query_text>).

  • запрос - фактическое время выполнения запроса (результат команды EXPLAIN ANALYSE <query_text>).

Если нажать на пустое поле строки таблицы, выпадет подробный план запроса (подсветится зелёным цветом) с детализацией по каждому узлу и текст самого запроса (подсветится серым цветом). Во всех строках находится текст одного и того же запроса. А вот планы запросов будут отличаться по значениям параметров узлов. У всех этих планов общий шаблон, представленный сверху.

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

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

В самом верху вкладки «Heatmap» («Тепловая карта») находится столбчатая диаграмма, показывающая распределение данных по этому шаблону в течение последних часов. Распределение происходит по времени, «по памяти» - по кэш-буферам и по диску. На горизонтальной оси отмечены часы, а по вертикали располагаются полоски, в каждой из которых находится по 10 минут.

Если прокрутить в самый низ этой страницы, откроется более детализированное распределение запросов по времени.

При наведении курсора мыши на отдельную точку графика вы увидите основную информацию об этих запросах из логов.

Вкладка «По приложениям»

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

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

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

При нажатии на сам id шаблона также, как и во вкладке «По шаблонам», откроется детализация по нему.

Вкладка «По объектам базы (операции)»

Базы данных представляют из себя таблицы и их индексы, названия которых представлены во втором («Таблица») и третьем («Индексы») столбцах таблицы этой вкладки соответственно. Данные из баз можно читать, либо записывать. Читать их можно просто последовательно проходясь по данным с помощью операции Seq Scan, проходясь по индексу с помощью операции Index Scan, с помощью битовых карт. Названия операций этих узлов представлены в первом столбце.

Нажатие на кнопку |узел_button| переводит на страницу /узел.

Таким образом, тип узла - это операция, которая производилась в определённом запросе, а таблицы и индексы - объекты базы, которые участвовали в этой операции. В остальных столбцах приведены следующие данные:

  • 4 столбец - при нажатии на пустое рабочее пространство строки в этом столбе появятся идентификационные номера шаблонов, содержащим такие узлы.

  • 5 столбец (ptr) - количество шаблонов запросов с такой операцией.

  • 6 столбец (кол-во) - количество запросов с шаблоном из 5го столбца.

  • 7 столбец (loops) - количество циклов совершения данной операции.

  • 8 столбец (loops,avg) - среднее количество строк, возвращённых одним циклом с такой операцией (результат деления значение 9го столбца на значение 7го столбца).

  • 9 столбец (rows) - количество записей в строках, которые были возвращены этой операцией.

  • 10 столбец (rows, avg) - «rows, average», среднее количество строк, возвращённых из таблицы одной данной операцией.

  • 11 столбец (RRbF) - «Rows removed by filter», количество отфильтрованных записей в строках (если значение этого столбца, то есть количество отброшенных строк, сильно больше, чем количество возвращённых строк - значение столбца «rows» - то это результат не самого оптимального запроса, который может доставить неудоства другим пользователям сервера, так как неразумно читать настолько много записей, чтобы потом оставить такой маленький их процент. Использование узла «Sec Scan» при очень большом числе прочитанных записей также не является предпочтительным. Примерно то же самое с CTE, так как доступ к записям CTE гораздо дороже даже чем чтение из таблицы с помощью Sec Scan’a).

  • 12 столбец (RRbF, avg) - «Rows removed by filter, average», среднее количество строк, отфильтрованных одной данной операцией.

  • 13 столбец (RRbF, %) - «Rows removed by filter, %», количество отфильтрованных строк в процентном соотношении от общего количества записей в таблице.

  • 14 столбец (last) - время выполнения последнего запроса с таким узлом.

Кликнув на пустое рабочее пространство в строке, можно открыть все шаблоны с этим узлом в порядке убывания количества их повторяемости.

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

Вкладка «По объектам базы (ресурсы)»

На этой вкладке представлена примерно такая же информация, что и на вкладке «По объектам базы (операции)», только с информацией о ресурсах памяти, потреблённых данной операцией (7 столбец - sum, mc).

Вкладка «По динамическим объектам (операции)»

Иногда в процессе выполнения запроса возникают динамические объекты, которых нет в базе данных, но в запросе они есть (различные подзапросы, Common table expression - CTE, рекурсивные выражения). Эти динамические объекты представлены во 2 столбце - «объект».

Вкладка «По динамическим объектам (ресурсы)»

Здесь представлена та же информация, что и в предыдущей вкладке, только по памяти.

Вкладка «По триггерам»

Есть два вида триггеров:

  • Пользовательские - это специальные хранимые процедуры, которые выполняются автоматически при определенных событиях, происходящих в базе данных. Эти события могут быть связаны с изменениями в таблицах, например, при вставке, обновлении или удалении данных.

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

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

Вкладка «Пиковые цепочки»

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

Вкладка «По времени и ресурсам»

На этой вкладке представлены те же самые метрики, что и на вкладке «По шаблонам», но здесь единицей анализа является не цельный план, а сами атомарные запросы.