Работа с командным центром Greenplum®
В командном центре Greenplum® вы можете:
- Посмотреть информацию о сессиях и запросах.
- Просмотреть историю потребления для завершенных запросов.
- Прервать текущую сессию.
- Прервать текущий запрос.
Также ознакомьтесь с примерами работы в командном центре — они помогут понять, как и в каких ситуациях можно использовать командный центр.
Подробнее о статистике, которую можно получить с помощью командного центра, читайте в разделе Командный центр Greenplum®.
Примечание
Командный центр Greenplum® позволяет проводить только базовый операционный анализ сессий и запросов. Если ваша задача требует углубленного стратегического исследования и расширенных инструментов анализа, используйте экспорт логов в Yandex Cloud Logging. Сервис Yandex Cloud Logging позволяет визуализировать логи в Grafana и выполнять их обработку с помощью Data Streams и Query.
Посмотреть информацию о сессиях и запросах
Вы можете посмотреть список сессий и запросов и подробную информацию по ним. По каждой сессии можно изучить историю этой сессии и ее запросов. По каждому запросу можно изучить план его выполнения и JSON-файл с деталями.
Чтобы посмотреть информацию о сессиях и запросах:
-
Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. -
Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр. -
Выберите, что вы хотите посмотреть, и перейдите на нужную вкладку:
- текущие сессии или запросы — вкладка Текущее состояние;
- сессии или запросы за прошедший момент времени — вкладка История состояний.
-
Выберите раздел Сессии или Запросы. Во вкладке История состояний эти разделы располагаются под графиком.
-
Чтобы отфильтровать список сессий или запросов, нажмите кнопку
Фильтры и выберите нужные параметры. -
Чтобы посмотреть детали:
- сессии — нажмите на имя сессии;
- запроса — нажмите на ключ выполняемого запроса.
Параметры сессий и запросов описаны в разделе Параметры командного центра Greenplum®.
Просмотреть историю потребления для завершенных запросов
В истории потребления доступно несколько системных метрик. Они показывают, как кластер Greenplum® потреблял ресурсы для обработки запросов в разные моменты времени. Также вы можете посмотреть список завершенных запросов. С помощью полученной информации вы можете определить, как управлять CPU и памятью хостов кластера для эффективной обработки запросов.
Чтобы посмотреть историю потребления для завершенных запросов:
-
Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. -
Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр → История потребления. -
Выберите нужный показатель потребления:
- CPU time — время в секундах, которое понадобилось ресурсам CPU для обработки запросов.
- Peak memory — максимальное количество памяти, которое потребовалось для обработки запроса за все время жизни кластера.
- Disk R — память в байтах, которая понадобилась для чтения данных.
- Disk W — память в байтах, которая понадобилась для записи данных в БД.
- Spill — дополнительный объем дисковой памяти, который потребовался для выполнения запросов.
- Total time — суммарное время, затраченное на обработку запросов.
После того как вы выберете показатель потребления, отобразится график с деталями и список запросов. На графике указаны значение показателя, пользователь, который выполнил запрос, и время выполнения запроса.
-
Чтобы отфильтровать результаты, нажмите кнопку
Фильтры и выберите нужные параметры.
Прервать текущую сессию
Чтобы освободить ресурсы для сессий, вы можете прервать простаивающую сессию в статусе Idle:
-
Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. -
Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр. -
В разделе Текущее состояние → Сессии нажмите на значок
в нужной строке и выберите пункт Прервать сессию.Если у вас отображается пункт Прервать запрос, выберите его и остановите запрос.
-
Подтвердите остановку сессии.
Прервать текущий запрос
Чтобы освободить ресурсы для выполнения запросов, вы можете прервать запрос в статусе Idle в простаивающей сессии. Для этого:
- Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. - Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр. - В разделе Текущее состояние → Запросы нажмите на значок
в нужной строке и выберите пункт Прервать запрос. - Подтвердите остановку запроса.
Примеры анализа текущего состояния
Командный центр Greenplum® поддерживает следующие виды анализа текущего состояния кластера:
- Анализ метрик, например поиск тяжелой сессии или анализ структуры выполнения запросов.
- Анализ событий, например поиск простаивающей сессии или поиск блокирующей сессии.
Поиск текущей сессии, которая потребляет аномальное количество ресурсов
- Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. - Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр → Текущее состояние. - Отсортируйте сессии по одному из столбцов: CPU time, Peak memory, Spill, Disk W, Disk R, Net recv или Net sent.
- Найдите сессии, которые потребляют наибольшее количество выбранного ресурса.
- Для каждой выбранной сессии:
- Нажмите на номер сессии. Откроется страница с информацией об этой сессии.
- Сопоставьте показатели вычислительной нагрузки и нагрузки на ввод-вывод (CPU time, Peak memory, Spill, Disk W, Disk R, Net recv, Net sent) с общими графиками нагрузки на кластер или его отдельные хосты.
- Определите, какая из сессий внесла наибольший вклад в потребление ресурсов.
- Чтобы посмотреть детали о состояниях сессии в разные моменты времени и отследить изменение показателей во времени, перейдите на вкладку История сессии.
Примечание
Найти проблемы с потреблением ресурсов в конкретной сессии может только инициатор запросов, так как только он знает ожидаемое время работы конкретных запросов.
Анализ структуры выполнения запросов
Вы можете выявить запросы, которые выполняются неэффективно из-за логики построения SQL-выражений или порядка операций.
-
Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. -
Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр → Текущее состояние. -
Перейдите на вкладку Сессии.
-
Включите отображение только активных сессий. Для этого выключите все кнопки-статусы, кроме Active.
-
Отсортируйте сессии по столбцу Время старта.
-
Найдите долгоживущую сессию с высокими значениями в столбцах CPU time и Peak memory. Нажмите на номер этой сессии. Откроется страница с информацией о ней.
-
Проанализируйте значения CPU time, Peak memory, Spill, Skew, Net sent, Net recv и Interconnect retransmits.
-
Если вы видите высокие значения Net sent и Net recv, а также ненулевое значение Interconnect retransmits:
- Перейдите на вкладку Запросы.
- Примените фильтр SSID:, указав идентификатор транзакции выбранной сессии.
- Отсортируйте запросы по столбцу Ключ выполняемого запроса по убыванию.
- Откройте планы выполнения нескольких запросов.
- Если после
Sort,AggregateилиDistinctвы видитеGatherилиGather Merge, перенеситеGROUP BY/DISTINCT/ORDER BYв подзапросы. - Если вы видите широкие выборки с полным набором столбцов, ограничьте результат с помощью
LIMITили постраничного вывода, а также отберите только необходимые столбцы и примените фильтры на ранних этапах запроса.
-
Если вы видите ненулевое значение Spill:
- Перейдите на вкладку Запросы.
- Примените фильтр SSID:, указав идентификатор транзакции выбранной сессии.
- Отсортируйте запросы по столбцу Ключ выполняемого запроса по убыванию.
- Откройте планы выполнения нескольких запросов.
- Если вы видите подзапросы с зависимостью от внешней строки (
EXISTSилиINс корреляцией), а в плане выполнения присутствуют узлыSubPlanилиInitPlan, декоррелируйте такие подзапросы. - Если вы видите сортировку или материализацию, а затем
WindowAggнад большими выборками, примените предагрегацию или фильтрацию, а также исключите лишние столбцы до применения оконных функций. - Если вы видите
SortилиDistinctна разных уровнях вложенности, уменьшите количество таких операций и глубину их вложенности.
-
Если вы видите высокие значения CPU time или Peak memory при ненулевых значениях Skew:
- Перейдите на вкладку Запросы.
- Примените фильтр SSID:, указав идентификатор транзакции выбранной сессии.
- Отсортируйте запросы по столбцу Ключ выполняемого запроса по убыванию.
- Откройте планы выполнения нескольких запросов и проверьте, как выполняются соединения:
- Если соединения выполняются по столбцам, отличным от фактического ключа распределения таблиц, перепишите запрос.
- Если соединяются крупные наборы, а фильтры отсутствуют или применяются после
JOIN, используйте фильтрацию в подзапросах доJOIN.
-
Поиск простаивающей сессии
Допустим, пользователь закончил работу с БД, но оставил свою сессию открытой. В таком случае сессия простаивает и потребляет ресурсы кластера, что приводит к снижению его производительности. Чтобы найти и прервать такую сессию:
- Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. - Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр → Текущее состояние. - Отсортируйте сессии по столбцу Время старта.
- Найдите сессию в статусе
Idle, которая длится наибольшее количество времени. Нажмите на номер этой сессии. Откроется страница с информацией о ней. - В разделе Информация о сессии в поле Время начала запроса посмотрите, когда был отправлен последний запрос.
- Если сессия не выполняет запросы, а удержание соединения не требуется по логике клиентского приложения, такую сессию можно прервать. Для этого в правом верхнем углу нажмите кнопку Прервать сессию и подтвердите остановку сессии.
Поиск блокирующей сессии
В некоторых случаях сессия надолго захватывает строки таблицы или ее метаданные. Это может создавать очередь из заблокированных сессий, ожидающих захвата ресурса. Чтобы определить, какая сессия является блокирующей:
- Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. - Нажмите на имя нужного кластера и перейдите на вкладку
Командный центр → Текущее состояние. - Перейдите на вкладку Сессии.
- Для отображения дерева блокировок нажмите кнопку
. - Исследуйте дерево блокировок и определите основные блокирующие сессии.
- По каждой блокирующей сессии проверьте:
- Статус — как правило,
ActiveилиIdle transaction. - Значения параметров Время старта и Статус изменён.
- Количество потребляемых ресурсов.
- Количество заблокированных сессий.
- Текст запроса.
- Статус — как правило,
- Если блокирующая сессия долго находится в состоянии
Activeи потребляет вычислительные ресурсы, причиной может быть тяжелый запрос. В этом случае может помочь оптимизация запросов и бизнес-логики. - Если сессия блокирует множество других сессий и давно находится в состоянии
Idle transaction, вы можете ее прервать после дополнительных проверок:- Убедитесь, что CPU time не увеличивается, а поле Причина ожидания пустое.
- В правом верхнем углу нажмите кнопку Прервать сессию.
- Подтвердите остановку сессии.
Совет
Для предотвращения длительных блокировок:
- оптимизируйте запросы и уменьшите разовый объем обрабатываемых данных;
- разнесите по времени интерактивные запросы и тяжелые операции;
- задайте таймауты выполнения запросов и ожидания блокировки.
Примеры анализа истории состояний и истории потребления
Командный центр Greenplum® поддерживает следующие виды анализа истории сессий и запросов:
- Анализ метрик, например поиск тяжелых запросов и поиск запросов с большой нагрузкой на сеть.
- Анализ событий, например поиск отмененных запросов и ошибок выполнения.
Поиск запросов, вызвавших высокую нагрузку CPU
Допустим, в определенный период потребление вычислительной мощности CPU было выше обычного. Чтобы определить, какие запросы вызвали эту аномалию:
-
Узнайте, когда было зафиксировано высокое потребление CPU:
-
Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. -
Нажмите на имя нужного кластера и перейдите в
Командный центр → История состояний. -
Задайте фильтр CPU usage.
-
Определите по графику, когда потребление CPU стало аномально высоким.
Для этого наведите курсор на высокий пик. Появится всплывающее окно с информацией о состоянии кластера в выбранный момент. В этом окне указано время, когда произошел всплеск.
-
-
Определите, какие запросы привели к высокому потреблению CPU:
- Перейдите на вкладку История потребления.
- Задайте диапазон времени на основе анализа истории состояний.
- Сгруппируйте запросы по пользователю, базе данных и идентификатору запроса. Так вы получите группы, которые содержат похожие друг на друга запросы.
- Отсортируйте полученные группы запросов по столбцу CPU time.
- Откройте группу с наибольшим значением CPU time.
- Изучите SQL-текст запросов и их планы выполнения, чтобы определить, что привело к высокому потреблению CPU.
Совет
Найти проблемы с потреблением CPU в конкретной сессии может только инициатор запросов, однако на необходимость в оптимизации могут указать следующие признаки:
- сложные вычисления и выражения, выполняемые построчно;
- сортировки и агрегации без фильтрации данных;
- многократные проходы по большим таблицам без использования индексов или распределения данных;
- повторные вычисления подзапросов или функций внутри выражений.
Поиск запросов, вызвавших большую нагрузку на сеть
-
Определите приблизительный интервал времени, когда наблюдались сетевые проблемы и ошибки, например:
- жалобы на сбои подключения к кластеру или долгие отклики;
- сетевые аномалии и ошибки по данным логов и мониторинга кластера.
-
Определите причину появления ошибок:
- Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. - Нажмите на имя нужного кластера и перейдите в
Командный центр → История состояний. - Задайте диапазон времени, в который наблюдались ошибки.
- В выпадающем списке над графиком последовательно выберите Connections, а затем Net usage. Сравните графики.
- Если наблюдались необычно большие значения Net usage, то наиболее вероятная причина — аномальная сетевая активность.
- Если наблюдались необычно большие значения Connections, то наиболее вероятная причина — всплеск соединений.
- Перейдите на страницу каталога
-
Если причина ошибок — аномальная сетевая активность:
- Перейдите на вкладку История потребления.
- Задайте диапазон времени на основе анализа истории состояний.
- Выберите Группировать по: → пользователю.
- Отсортируйте группы запросов по столбцам Net sent и Net recv.
- Найдите пользователя с максимальными значениями в этих столбцах. Отфильтруйте группы запросов по этому пользователю.
- Выберите Группировать по: → ID запроса и отключите группировку по пользователю.
- Найдите запросы, которые генерировали больше всего трафика. Сохраните текст этих запросов и время их старта.
- Перейдите на вкладку Сессии.
- Используя поиск по тексту запросов, найдите нужные запросы.
- Определите источник трафика с помощью столбца Приложение.
- По результатам анализа на стороне приложений с аномальной сетевой активностью:
- ограничьте объем выгружаемых данных;
- используйте материализованные представления или временные таблицы;
- оптимизируйте распределение таблиц (DISTRIBUTED BY) и обновите статистику таблиц перед выполнением больших вставок;
- пересмотрите архитектуру ETL-пайплайнов.
-
Если причина ошибок — всплеск соединений:
- Под графиком перейдите на вкладку Сессии.
- Отсортируйте сессии по столбцу Время старта.
- Выберите на графике момент времени с наибольшими значениями Connections. Используйте блок На момент времени: и стрелки < > для точного задания момента времени.
- Используя фильтры Пользователь и Имя приложения:, сравните количество созданных сессий в секунду для каждого источника.
- Если один источник создает намного больше сессий, чем остальные:
- Проверьте, что приложение переиспользует соединения.
- Настройте параметры повторных подключений: интервал между повторами и общее количество попыток.
- При необходимости измените настройки менеджера подключений по результатам анализа.
Поиск отмененных запросов и ошибок выполнения
Если пользователь жалуется на большое время ожидания и потерю соединения, однако от других пользователей таких жалоб нет, это может указывать на ошибки выполнения или отмену запросов.
Чтобы определить, какие запросы были отменены или вызвали ошибки выполнения:
-
Перейдите на страницу каталога
и выберите сервис Yandex MPP Analytics for PostgreSQL. -
Нажмите на имя нужного кластера и перейдите в
Командный центр → История состояний. -
Перейдите на вкладку Запросы.
-
Выберите момент времени, когда наблюдались проблемы по данным мониторинга. Используйте блок На момент времени: и стрелки < > для точного задания момента времени.
-
Отсортируйте запросы по столбцу Состояние запроса.
-
Найдите запросы со статусом
CanceledилиError. -
Установите источники запросов по значениям в столбцах Пользователь и Приложение. При необходимости используйте фильтры Пользователь: и Имя приложения:.
-
Если один источник создает намного больше отмененных и ошибочных запросов, чем остальные:
-
Проверьте и, при необходимости, оптимизируйте бизнес-логику и структуру SQL-запросов.
Обратите особое внимание на частые полные выборки, отсутствие фильтрации данных, избыточные соединения таблиц или вложенные подзапросы.
-
Задайте интервал между повторными подключениями и общее количество попыток.
-
-
При необходимости используйте менеджер подключений, чтобы ограничить количество одновременных активных подключений и сбалансировать нагрузку между клиентами.
Оптимальные параметры зависят от числа сегментов и ресурсов кластера.
Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками Broadcom Inc в США и/или других странах.