Руководство пользователя

Query Monitor

Страница Query Monitor отображает доступную для просмотра текущему пользователю ADCC информацию о запросах, выполняемых в данный момент времени пользователями ADB (Рис.78.). На странице отображаются выполняющиеся (Running), находящиеся в очереди ожидания исполнения (Queued), а также заблокированные запросы (Blocked). В зависимости от присвоенных прав доступа пользователю доступна отмена выполнения некоторых или всех запросов в списке.

../_images/query_monitor_overview.png

Рис. 78. Query Monitor

Информация о запросах

Для каждого запроса в списке указывается:

  • Query ID – уникальный идентификатор запроса, например: 1590901567-16-2. Значение является ссылкой на страницу с расширенной информацией о запросе. Идентификатор формируется из значений параметров tmid, ssid и ccnt для каждого запроса:

    • tmid – временная метка старта кластера;
    • ssid – id сессии;
    • ccnt – номер команды в рамках сессии.
  • Text – первые 20 символов текста запроса. При наведении текст отображается в полном виде;

  • Status – статус запроса, принимает одно из следующих значений:

    • QUEUED – запрос находится в очереди ожидания исполнения;
    • RUNNING – запрос выполняется;
    • BLOCKED – выполнение запроса заблокировано ожиданием получения ресурсной очереди или слота ресурсной группы; блокировкой, вызванной синхронной репликацией или удерживаемой другой транзакцией на объекте базы данных (lock);
    • CANCELLING – отправлен запрос на отмену выполнения.

    В случае, если статус Blocked вызван блокировкой на объекте базы данных, удерживаемой другой транзакцией, нажатие на пиктограмму справа от значения в поле status открывает окно с дополнительной информацией (Рис.79.). В окне содержится перечисление блокирующих запросов, для каждого из которых указывается:

    • queryId – уникальный идентификатор. Значение параметра ssid запроса, выполняющегося в режиме utility, равно -1. В некоторых случаях, когда невозможно определить номер команды в рамках сессии, параметр ccnt содержит значение X;
    • target – информация об объекте, на котором удерживается блокировка;
    • segments – идентификатор сегмента, на котором удерживается блокировка;
    • user – пользователь, выполнивший запрос;
    • blocked for – длительность блокировки.
    ../_images/query_monitor_blockers.png

    Рис. 79. Дополнительная информация о блокировке

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

  • User – пользователь ADB, выполнивший запрос;

  • Database – название базы данных, в которой был выполнен запрос;

  • Workload – название ресурсной группы или ресурсной очереди, управляющей данным запросом;

  • Submitted – время создания запроса;

  • Queued time – длительность нахождения запроса в очереди ожидания исполнения;

  • Run time – длительность исполнения запроса.

Отмена выполнения запроса

ADCC предоставляет возможность отмены запросов, выполняющихся в кластере ADB. Для отмены одного или нескольких запросов необходимо (Рис.80.):

  1. Выбрать при помощи чекбоксов в начале строк таблицы все необходимые запросы (выбор доступен только для запросов, отмена которых разрешена, исходя из прав доступа, определенных для пользователю);

  2. Выбрать способ отмены запроса и нажать соответствующую кнопку справа над таблицей:

    • Cancel – отмена выполнения запроса путем вызова функции pg_cancel_backend, отменяющей запрос в обслуживающем процессе;
    • Terminate – отмена выполнения запроса путем вызова функции pg_terminate_backend, завершающей обслуживающий процесс, в котором выполняется запрос.
../_images/query_monitor_kill.png

Рис. 80. Выбор запроса для отмены выполнения

History

На странице History можно получить информацию о запросах, выполнявшихся в кластере ADB в заданный период времени (Рис.81.).

../_images/history_overview.png

Рис. 81. Query History

Панель фильтров, позволяющая ограничивать вывод истории запросов, открывается при нажатии на иконку в правом верхнем углу экрана. Доступны следующие опции (Рис.82.):

  • Ограничение периода времени, в который был создан запрос, по дате (Рис.83.) и времени (Рис.84.);
  • Подстрока, которая должна содержаться в тексте запроса.
../_images/history_filter.png

Рис. 82. Панель фильтров для истории запросов

../_images/filter_date.png

Рис. 83. Установка даты начала/конца периода

../_images/filter_time.png

Рис. 84. Установка времени начала/конца периода

Для каждого запроса в списке указывается:

  • Query ID – уникальный идентификатор запроса, например: 1590901567-16-2. Значение поля является ссылкой на страницу с расширенной информацией о запросе. Идентификатор формируется из значений параметров tmid, ssid и ccnt для каждого запроса:

    • tmid – временная метка старта кластера;
    • ssid – id сессии;
    • ccnt – номер команды в рамках сессии.
  • Text – первые 20 символов текста запроса. При наведении текст отображается в полном виде;

  • Status – итоговый статус запроса, принимает одно из следующих значений:

    • DONE – запрос успешно выполнен;
    • CANCELLED – выполнение запроса отменено;
    • ERROR – во время исполнения запроса произошла ошибка.
    • UNKNOWN – статус выставляется по таймауту для запросов в статусе ‘QUEUED’, ‘RUNNING’, ‘BLOCKED’, ‘CANCELLING’, ‘IDLE_TRANSACTION’, по которым не оказалось соотвествующих записей в pg_stat_activity. Этот статус сигнализирует о том, что завершающий реальный статус по запросу не был получен.
  • User – пользователь ADB, выполнивший запрос;

  • Database – название базы данных, в которой был выполнен запрос;

  • Submitted – время создания запроса;

  • Queued time – длительность нахождения запроса в очереди ожидания исполнения;

  • Run time – длительность исполнения запроса;

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

Query Details

Страница Query Details содержит расширенную информацию о выполняющемся запросе или об одном из запросов истории (Рис.85.).

../_images/query_details_overview.png

Рис. 85. Query Details - выполняющийся запрос

Информация о запросе

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

Details

  • User – пользователь ADB, выполнивший запрос;

  • Database – название базы данных, в которой выполнен запрос;

  • Workload – название ресурсной группы или ресурсной очереди, управляющей данным запросом;

  • Planner – планировщик запросов, используемый для данного запроса: Legacy или GPORCA;

  • Queued Time – длительность нахождения запроса в очереди ожидания исполнения;

  • Submitted – время создания запроса;

  • Run Time – длительность исполнения запроса;

  • Est. progress – оценка прогресса выполнения запроса в процентах. Значение рассчитывается на основании оценок стоимости (коэффициента трудоемкости выполнения) и прогресса для каждого узла плана запроса:

    ../_images/node_progress.png

    Где

    • NodeProgress – прогресс узла;
    • ActualRows – реальное количество извлеченных строк (кортежей);
    • EstimatedRows – предположение планировщика о количестве строк (кортежей), которое будет извлечено для данного узла.

    Тогда общий прогресс, рассчитанный на основании суммы оценок для всех узлов плана:

    ../_images/overall_progress.png

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

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

Performance

Метрики по производительности опрашиваются агентами на сегментах с периодичностью раз в 5 секунд, таким образом запросы, которые успевают завершиться быстрее этого времени, не получат метрик по производительности. В этом блоке отображаются как метрики по каждому сегменту, включая мастер-сегмент seg-1 (segment_id = -1), так и средние значения с “перекосами” по кластеру.

Объем spill-файлов

ADB создает spill-файлы, если доступной памяти ОС оказывается недостаточно. Эта метрика меняется в зависимости от статуса запроса.

Для исполняющегося запроса в блоке отражено единственное значение:

  • Spill Files – объем spill-файлов в байтах, используемых в данный момент времени.

Для запроса из истории блок содержит следующие значения:

  • Spill Files (max) – максимальный объем используемых spill-файлов в мебибайтах (MiB), зафиксированный за время выполнения запроса;
  • Spill Files (skew) – паказатель в %, отражающий “перекос” в объеме созданных на сегментах spill-файлов для момента времени, в который наблюдалась величина Spill Files (max). Значение, отличное от нуля, говорит о том, что один из сегментов использовал больший объем spill-файлов, чем остальные. При расчете не учитывается мастер-сегмент (seg-1). Расчет значения производится следующим образом:
../_images/spill_files.png

Потребление CPU

Блок содержит следующие значения:

  • CPU Avg – средний объем потребляемого CPU для сегмента в %, зафиксированный в момент выполнения запроса (если запрос завершен, то на момент завершения запроса). При расчете не учитывается мастер-сегмент (seg-1). Потребление CPU в каждый конкретный момент рассчитывается на основе информации о процессорном времени из /proc/[pid]/stat операционной системы, как дельта между текущим и предыдущим значением;
  • CPU Skew – показатель в %, отражающий “перекос” в потреблении CPU на кластере. Значение, отличное от нуля, говорит о том, что один из сегментов использовал больший объем CPU, чем остальные. При расчете не учитывается мастер-сегмент (seg-1).

Потребление RAM

  • RAM Avg – средний объем потребляемого RAM для сегмента в байтах, зафиксированный в момент выполнения запроса (если запрос завершен, то на момент завершения запроса). При расчете не учитывается мастер-сегмент (seg-1). Потребление RAM в каждый конкретный момент рассчитывается на основе метрики rss (Resident Set Size) из операционной системы;
  • RAM Skew – показатель в %, отражающий “перекос” в потреблении CPU на кластере. Значение, отличное от нуля, говорит о том, что один из сегментов использовал больший объем RAM, чем остальные. При расчете не учитывается мастер-сегмент (seg-1).

Чтение с диска

  • Read Avg (per sec) – средний объем чтения с диска для сегмента в байтах, зафиксированный в момент выполнения запроса (если запрос завершен, то суммарно на момент завершения запроса). При расчете не учитывается мастер-сегмент (seg-1). Чтение с диска в каждый конкретный момент рассчитывается на основе информации об IO Read из /proc/[pid]/stat операционной системы, как дельта между текущим и предыдущим значением;
  • Read Skew – показатель в %, отражающий “перекос” в чтении данных на кластере. Значение, отличное от нуля, говорит о том, что один из сегментов ичитывал больший объем с диска, чем остальные. При расчете не учитывается мастер-сегмент (seg-1).

Запись на диск

  • Write Avg (per sec) – средний объем записи на диск для сегмента в байтах, зафиксированный в момент выполнения запроса (если запрос завершен, то суммарно на момент завершения запроса). При расчете не учитывается мастер-сегмент (seg-1). Запись на диск в каждый конкретный момент рассчитывается на основе информации об IO Write из /proc/[pid]/stat операционной системы, как дельта между текущим и предыдущим значением;
  • Write Skew – показатель в %, отражающий “перекос” в записи данных на кластере. Значение, отличное от нуля, говорит о том, что один из сегментов записывал на диск больший объем, чем остальные. При расчете не учитывается мастер-сегмент (seg-1).

Виртуальная память

  • Virtual Memory Avg – средний объем потребляемой виртуальной памяти для сегмента в байтах, зафиксированный в момент выполнения запроса (если запрос завершен, то на момент завершения запроса). При расчете не учитывается мастер-сегмент (seg-1). Потребление виртуальной памяти в каждый конкретный момент рассчитывается на основе метрики vsize (Virtual Memory Size) из операционной системы;
  • Virtual Memory Skew – показатель в %, отражающий “перекос” в потреблении виртуальной памяти на кластере. Значение, отличное от нуля, говорит о том, что один из сегментов использовал больший объем виртуальной памяти, чем остальные. При расчете не учитывается мастер-сегмент (seg-1).
../_images/query_details_performance.png

Рис. 89. Query Details - запрос из истории

Query Text

Текст запроса, отправленный на исполнение пользователем.

Plan&Progress

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

При нажатии на узел открывается панель с дополнительной информацией (Рис.90.):

  • Cost – коэффициент трудоемкости выполнения узла плана;
  • Relation – используемая таблица (опционально);
  • Row Skew – перекос в данных. Разность между единицей и отношением среднего значения к максимальному количеству кортежей, полученных с сегментов;
  • Est. Tuples – прогнозируемое количество кортежей;
  • Actual Tuples – реальное количество извлеченных кортежей;
  • Operation Keys – дополнительные условия, используемые при выполнении некоторых операций (например, Hash Key, Join Filter, Merge Key, Filter).

Цвет узла указывает на его состояние:

  • Белый – проинициализирован, выполнение не начато;
  • Темно-зеленый – выполняется;
  • Светло-зеленый – выполнение закончено.
../_images/dynamic_plan.png

Рис. 90. Графическое представление дерева плана

Textual plan

Текстовое представление плана запроса – результат выполнения команды Explain.

Кнопка planchecker в левом верхнем углу открывает текст запроса в сервисе https://planchecker.arenadata.io/, позволяющем получить детальную информацию о возможных проблемах производительности.

Отмена выполнения запроса

Исходя из прав доступа, определенных для пользователя, в правом верхнем углу страницы могут быть доступны кнопки, соответствующие двум способам отмены выполнения запроса (Рис.91.):

  • Cancel – отмена выполнения запроса путем вызова функции pg_cancel_backend, отменяющей запрос в обслуживающем процессе;
  • Terminate – отмена выполнения запроса путем вызова функции pg_terminate_backend, завершающей обслуживающий процесс, в котором выполняется запрос.
../_images/query_details_kill.png

Рис. 91. Кнопки отмены выполнения запроса