Мониторинг команд

Страница Monitoring → Commands в web-интерфейсе ADB Control предназначена для вывода SQL-команд, которые выполняются в кластерах ADB, подключенных для мониторинга. Страница состоит из двух вкладок Online и History, которые подробно описаны ниже.

  • По умолчанию в ADB Control фиксируются (и отображаются на странице Monitoring → Commands) SQL-запросы продолжительностью более 5 секунд. Начиная с ADB Control 4.3.2 лимит можно изменять с помощью конфигурационного параметра queryIdCache.moveToActiveTimeoutSeconds на стороне агента.

  • Начиная с версии ADB Control 4.1.0 в системе мониторинга по умолчанию фиксируются только верхнеуровневые запросы. То есть исключаются запросы, вызываемые в процессе обработки основного запроса — в рамках функций, SPI (Server Programming Interface) и т.д. Если необходимо включить мониторинг вложенных запросов, установите значение true для следующих GUC (начиная с версии 4.7.5 их редактирование доступно в интерфейсе ADB Control):

    • adcc.monitor_utility_inner_queries — определяет необходимость мониторинга вложенных запросов для utility-команд вида COPY, VACUUM, DDL-запросов и так далее.

    • adcc.monitor_inner_queries — определяет необходимость мониторинга вложенных запросов для иных команд.

Список команд

Online

На вкладке Monitoring → Commands → Online выводятся команды в следующих статусах:

  • Queued — команды, по которым еще не пришла информация о фактическом начале выполнения.

  • Running — команды, выполняющиеся в текущий момент времени.

  • Cancelling — команды, для которых осуществляется отмена (в рамках отмены либо прерывания соответствующей транзакции).

В верхней части вкладки содержится поле Current count, показывающее общее число команд в различных статусах во всех кластерах ADB, подключенных для мониторинга.

Вкладка Monitoring → Commands → Online
Вкладка Monitoring → Commands → Online
Вкладка Monitoring → Commands → Online
Вкладка Monitoring → Commands → Online

Таблица, расположенная на вкладке Monitoring → Commands → Online, выводит следующую информацию о командах.

Поле Описание

Command ID

Уникальный идентификатор команды, включающий:

  • временную метку старта кластера;

  • номер сессии;

  • номер команды в рамках сессии;

  • хеш-код от имени кластера (может быть отрицательным).

Command text

Первые символы текста команды. Для вывода текста полностью (в случае длинных запросов) наведите курсор мыши на ячейку таблицы со значением

SQL ID

Идентификатор, являющийся общим для SQL-команд с одинаковой структурой

Username

Имя пользователя, запустившего команду

Status

Статус команды. Возможные значения см. выше

Database

Название базы данных, в которой запущена команда

Resource group

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

Cluster

Название кластера, в котором запущена команда

Planner

Название оптимизатора запросов, используемого для построения плана выполнения команды. Возможные значения:

  • GPORCA — план запроса построен с использованием оптимизатора GPORCA (optimizer = on).

  • Fallbacked — после неудачной попытки построения плана с помощью GPORCA (optimizer = on) использован оптимизатор Postgres.

  • Legacy — план запроса построен с помощью Postgres query optimizer (optimizer = off).

Submitted

Дата и время отправки команды пользователем в формате DD/MM/YYYY HH:mm:ss

Tags

Теги команды

Run time

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

Возможно добавление дополнительных столбцов в таблицу с командами для отображения метрик, описание которых представлено ниже. Для добавления новых столбцов нажмите Customize table и отметьте столбцы в выпадающем списке.

Добавление дополнительных столбцов
Добавление дополнительных столбцов
Добавление дополнительных столбцов
Добавление дополнительных столбцов

Над таблицей со списком команд расположен фильтр Cluster, в котором можно выбрать кластер ADB и его базы данных, для которых требуется вывести данные в таблице. По умолчанию выбраны все БД кластера, отмеченного как дефолтный в настройках ADB Control.

Фильтрация по кластеру и БД
Фильтрация по кластеру и БД
Фильтрация по кластеру и БД
Фильтрация по кластеру и БД

В заголовках столбцов таблицы со списком команд расположены фильтры, которые можно использовать для отбора необходимых данных. Для открытия фильтра необходимо нажать на иконку openside dark openside light. Для тех столбцов, где набор возможных значений ограничен (например, Status), в фильтре можно выбрать значение из выпадающего списка. Для некоторых столбцов (например, Username) требуется ввести искомое значение. Для столбцов, показывающих дату и время (например, Submitted), временной диапазон можно выбрать из календаря.

Иконка filtered dark filtered light означает, что для столбца определен фильтр. Для сброса всех фильтров нажмите Reset.

History

На вкладке Monitoring → Commands → History выводятся команды в следующих статусах:

  • Done — успешно завершенные команды.

  • Cancelled — отмененные команды (в рамках отмены либо прерывания соответствующей транзакции).

  • Error — команды, во время выполнения которых произошла ошибка.

  • Unknown — команды, итоговый статус которых не был получен. Устанавливается по тайм-ауту для запросов в статусах Queued, Running, Cancelling, по которым не оказалось соответствующих записей в системном представлении pg_stat_activity.

Вкладка Monitoring → Commands → History
Вкладка Monitoring → Commands → History
Вкладка Monitoring → Commands → History
Вкладка Monitoring → Commands → History

Большая часть полей в таблице со списком команд на вкладке History совпадает с полями, описанными выше для вкладки Online. Добавляется только следующее поле:

  • Ended — дата и время завершения команды в формате DD/MM/YYYY HH:mm:ss. Поле заполняется как в результате успешного выполнения, так и в случае ошибки или отмены выполнения.

Как и на вкладке Online, есть возможность добавления дополнительных столбцов в таблицу с командами — путем нажатия на кнопку Customize table.

Над таблицей со списком команд расположены фильтры, которые можно использовать для отбора необходимых данных. Наряду с описанным выше фильтром Cluster, на вкладке History доступны еще два фильтра:

  • Relation — фильтрация по названию используемого в запросе отношения. Искомое значение вводится полностью.

  • Schema — фильтрация по названию схемы БД, которой принадлежит используемое в запросе отношение. Искомое значение вводится полностью.

Фильтры на вкладке Monitoring → Commands → History
Фильтры на вкладке Monitoring → Commands → History
Фильтры на вкладке Monitoring → Commands → History
Фильтры на вкладке Monitoring → Commands → History

Детали команды

Чтобы просмотреть детальную информацию о команде, нажмите на ее идентификатор (Command ID) в таблице на вкладке Monitoring → Commands → Online либо Monitoring → Commands → History.

Выбор команды
Выбор команды
Выбор команды
Выбор команды

Следующая страница содержит несколько секций, описанных ниже.

Заголовок

В верхней части страницы выводится следующая информация о команде:

  • Уникальный идентификатор (см. Command ID выше). В примере ниже — 1695219736-11866-3—​209077013.

  • Статус (см. Status выше). В примере ниже — Running.

  • Порядковый номер в ADB Control (начиная с 1). Ведется сквозная нумерация по всем кластерам с самой первой зафиксированной команды. В примере ниже — 2683.

  • Transaction ID — идентификатор транзакции, при нажатии на который можно перейти к просмотру деталей транзакции.

  • Run time — время выполнения команды в часах, минутах, секундах.

Заголовок страницы с деталями команды
Заголовок страницы с деталями команды
Заголовок страницы с деталями команды
Заголовок страницы с деталями команды

Overview

Секция Overview показывает базовую информацию о команде. В дополнение к полям, описанным выше, выводятся:

  • Run time — длительность выполнения команды в часах, минутах, секундах.

  • Est. progress — прогресс выполнения команды в процентах от спрогнозированного времени, рассчитываемый по формуле:

    где:

    • Est.Cost(x) — оценка стоимости узла плана запроса, сделанная планировщиком.

    • NodeProgress(x) — прогресс для каждого узла плана запроса, рассчитываемый по следующей формуле:

      где:

      • ActualRows — реальное количество извлеченных строк (кортежей).

      • EstimatedRows — предположение планировщика о количестве строк (кортежей), которое будет извлечено для текущего узла плана.

Секция Overview
Секция Overview
Секция Overview
Секция Overview

Performance

Секция Performance показывает статистику потребления системных ресурсов выбранной командой. Метрики, используемые для мониторинга, приведены в разделе Метрики, собираемые для команд.

В верхней части секции Performance показываются усредненные значения по всем сегментам кластера с выводом "перекосов" (skew).

Вывод средних значений по кластеру в секции Performance
Вывод средних значений по кластеру в секции Performance
Вывод средних значений по кластеру в секции Performance
Вывод средних значений по кластеру в секции Performance

Можно перейти к альтернативному варианту показа метрик, переведя переключатель под названием секции Performance в активное состояние. В результате отобразится таблица, где по каждой метрике выводится не только текущее значение, но и подробное описание.

Вывод подробных описаний метрик
Вывод подробных описаний метрик
Вывод подробных описаний метрик
Вывод подробных описаний метрик

В нижней части секции Performance показываются значения метрик отдельно для каждого сегмента кластера, включая master-сегмент seg-1 (где Segment ID равен -1).

Поля таблицы с метриками по каждому сегменту
Поле Описание

Segment ID

Идентификатор сегмента. Ссылается на gp_segment_configuration.content. Дополнительную информацию можно получить в разделе Таблицы системного каталога → gp_segment_configuration статьи Таблицы

Hostname

Название хоста

CPU

Объем потребляемого CPU в сегменте (в процентах). На основе значений метрики для всех сегментов рассчитывается средняя величина CPU avg usage %

RAM

Объем потребляемой памяти RAM в сегменте (в байтах). На основе значений метрики для всех сегментов рассчитывается средняя величина RAM average

Read (per sec)

Скорость чтения данных в секунду в сегменте (в байтах). На основе значений метрики для всех сегментов рассчитывается средняя величина Read avg per sec

Write (per sec)

Скорость записи данных в секунду в сегменте (в байтах). На основе значений метрики для всех сегментов рассчитывается средняя величина Write avg per sec

Virtual memory

Объем потребляемой виртуальной памяти в сегменте (в байтах). На основе значений метрики для всех сегментов рассчитывается средняя величина Virtual memory average

Вывод метрик по каждому сегменту в секции Performance
Вывод метрик по каждому сегменту в секции Performance
Вывод метрик по каждому сегменту в секции Performance
Вывод метрик по каждому сегменту в секции Performance

Начиная с версии ADBM 2.1.2 для таблицы, изображенной выше, доступны фильтрация и сортировка данных:

  • Фильтры предусмотрены для столбцов Segment ID и Hostname. Для применения фильтра нажмите на иконку openside dark openside light в заголовке столбца и введите искомое значение. Иконка filtered dark filtered light означает, что для столбца определен фильтр. Для сброса всех фильтров нажмите Reset.

  • Сортировка данных возможна во всех столбцах, кроме Hostname. Для изменения порядка сортировки данных в выбранном столбце нажмите на иконку arrow up dark arrow up light или arrow down dark arrow down light в его заголовке.

ВАЖНО

Запрос системных метрик на сегментах ADB производится агентами ADB Control только для команд с продолжительностью дольше 15 секунд. Поэтому для команд, которые успевают завершиться быстрее этого времени, секция с метриками будет пустой.

Command text

Секция Command text показывает текст запроса, который можно скопировать нажав на иконку copy hover dark copy hover light в верхнем правом углу фрагмента с кодом.

Секция Command text
Секция Command text
Секция Command text
Секция Command text

Секции с планом выполнения

Под секцией Command text расположены несколько вкладок, показывающих детали выполнения запроса:

  • Plan & progress

  • Text

  • Relations

Первая вкладка Plan & progress содержит графическое представление плана запроса в виде дерева. Выполнение производится снизу вверх — от дочерних узлов к корневому. Выполняющиеся узлы плана отмечаются иконкой running plan, завершенные — finished plan. В каждом узле плана отображается тип выполняемой операции, а также следующая информация:

  • Если запрос к БД выполняется:

    • Фактическое число извлеченных кортежей на текущий момент. Параметр обновляется в процессе выполнения.

    • Фактическое время выполнения слайса (группы узлов плана) на текущий момент. Параметр обновляется в процессе выполнения и отображается на всех узлах, принадлежащих одному слайсу.

  • Если запрос к БД завершен:

    • Общее фактическое время выполнения узла плана.

    • Общее фактическое число извлеченных кортежей.

    • Отношение времени обработки узла плана к общему времени выполнения запроса (в процентах).

Узлы плана, относящиеся к одному слайсу, выделяются одинаковым цветом.

Вкладка Plan and progress
Вкладка Plan & progress
Вкладка Plan and progress
Вкладка Plan & progress

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

Информация об узле плана
Поле Описание

Cost

Коэффициент трудоемкости выполнения узла плана

Schema

Имя схемы. Используется, чтобы отличать одноименные таблицы, принадлежащие различным схемам

Relation

Используемое отношение

Row skew

"Перекос" в данных (skew). Разность между единицей и отношением среднего значения количества кортежей, полученных с сегментов, к максимальному:

Est.tuples

Прогнозируемое количество кортежей, которое потребуется извлечь на текущем этапе выполнения плана

Actual tuples

Реальное количество извлеченных кортежей

Prediction accuracy

Отношение реального количества извлеченных кортежей к спрогнозированному (в процентах). Значение, превышающее 100%, указывает на то, что планировщик сделал неправильное предположение о количестве кортежей, которое потребуется извлечь при выполнении узла плана (их оказалось больше)

Operation keys

Дополнительные условия, используемые при выполнении некоторых операций. Например, Hash Key, Join Filter, Merge Key, Filter

Execution time

Время выполнения узла плана в часах, минутах, секундах

Информация об узле плана
Информация об узле плана
Информация об узле плана
Информация об узле плана

Следующая вкладка Text выводит текстовое представление плана запроса, которое является результатом выполнения команды EXPLAIN. Текст можно скопировать нажав на иконку copy hover dark copy hover light в верхнем правом углу фрагмента с кодом.

Вкладка Text
Вкладка Text
Вкладка Text
Вкладка Text

Кнопка PlanChecker открывает текст плана в web-интерфейсе сервиса PlanChecker, где можно получить детальную информацию о возможных проблемах производительности при выполнении текущего SQL-запроса.

PlanChecker
PlanChecker
PlanChecker
PlanChecker

Последняя вкладка Relations выводит список отношений, используемых в запросе. Для каждого отношения наряду с именем отображается название соответствующей схемы БД.

ПРИМЕЧАНИЕ

Нажав на конкретную строку в таблице со списком отношений, можно перейти к просмотру деталей аудита обращений к выбранному отношению. Этот функционал доступен для пользователей ADB Control с соответствующими разрешениями (см. View secured relation audit в статье Авторизация).

Вкладка Relations
Вкладка Relations
Вкладка Relations
Вкладка Relations

Метрики, собираемые для команд

Обе рассмотренные выше вкладки Online и History позволяют посмотреть статистику потребления системных ресурсов запущенными командами (на вкладке Performance в деталях команды). Доступные для команд метрики описаны ниже.

ПРИМЕЧАНИЕ
  • На вкладке Online значения метрик выводятся на текущий момент времени, на вкладке History — на момент завершения команды.

  • На вкладке Online не рассчитываются следующие метрики: Spill files max и Spill files skew.

  • При расчете средних значений и "перекосов" (skew) не учитывается master-сегмент (где Segment ID равен -1).

Метрики команд
Группа Метрика Описание

CPU

CPU usage total

Общее время потребления CPU по сегментам кластера (в секундах)

CPU avg usage %

Среднее потребление CPU (в процентах) процессами, участвующими в выполнении запроса на сегментах кластера. Рассчитывается как результат деления суммарного потребления CPU на всех сегментах кластера (исключая мастер и standby) на общее число процессов, обрабатывающих запрос на сегмент-хостах (исключая мастер и standby)

CPU skew

Показатель, отражающий "перекос" (skew) в потреблении CPU по сегментам кластера (в процентах). Значение, отличное от нуля, говорит о том, что один из сегментов использует больший объем CPU, чем остальные

RAM

RAM average

Средний объем потребляемой памяти RAM по сегментам кластера (в байтах). Потребление RAM в каждый конкретный момент рассчитывается на основе метрики rss (Resident Set Size) из операционной системы

RAM skew

Показатель, отражающий "перекос" (skew) в потреблении RAM по сегментам кластера (в процентах). Значение, отличное от нуля, говорит о том, что один из сегментов использует больший объем RAM, чем остальные

Virtual memory

Virtual memory average

Средний объем потребляемой виртуальной памяти по сегментам кластера (в байтах). Потребление виртуальной памяти в каждый конкретный момент рассчитывается на основе метрики vsize (Virtual Memory Size) из операционной системы

Virtual memory skew

Показатель, отражающий "перекос" (skew) в потреблении виртуальной памяти по сегментам кластера (в процентах). Значение, отличное от нуля, говорит о том, что один из сегментов использует больший объем виртуальной памяти, чем остальные

Read

Read total

Общий объем прочитанных данных по сегментам кластера (в байтах). Для расчета используется следующая формула:

Read avg per sec

Усредненный показатель скорости чтения данных в секунду по сегментам кластера (в байтах). Скорость чтения в каждый конкретный момент рассчитывается на основе информации об I/O Read из /proc/[pid]/stat операционной системы как дельта между текущим и предыдущим значением

Read skew

Показатель, отражающий "перекос" в чтении данных по сегментам кластера (в процентах). Значение, отличное от нуля, говорит о том, что один из сегментов считывает больший объем с диска, чем остальные

Write

Write total

Общий объем записанных данных по сегментам кластера (в байтах). Для расчета используется следующая формула:

Write avg per sec

Усредненный показатель скорости записи данных в секунду по сегментам кластера (в байтах). Скорость записи в каждый конкретный момент рассчитывается на основе информации об I/O Write из /proc/[pid]/stat операционной системы как дельта между текущим и предыдущим значением

Write skew

Показатель, отражающий "перекос" (skew) в записи данных по сегментам кластера (в процентах). Значение, отличное от нуля, говорит о том, что один из сегментов записывает на диск больший объем, чем остальные

Spill files

Spill files host

Общий объем spill-файлов на хостах кластера (в байтах)

Spill files max

Максимальный объем использованных spill-файлов по сегментам кластера (в байтах) за время выполнения команды

Spill files skew

Показатель, отражающий "перекос" (skew) в объеме созданных на хостах кластера spill-файлов (в процентах) на момент времени, в который наблюдалась величина Spill Files (max). Значение, отличное от нуля, говорит о том, что один из сегментов использовал больший объем spill-файлов, чем остальные. Вычисление производится на основе следующей формулы:

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней