Найти тему
Arenadata

Три способа отследить запросы Greenplum, которые «отъедают» слишком много ресурсов

Оглавление

В этой статье мы рассказываем о трёх проверенных специалистами Arenadata способах мониторинга утилизации системных ресурсов, потребляемых запросами в Greenplum.

Способ №1. Запрос с помощью EXPLAIN ANALYZE

Первый способ, который можно использовать, — это выполнить запрос с помощью EXPLAIN ANALYZE и разобрать план запроса. Так можно получить разнообразную информацию по памяти, например:

  • количество памяти, выделенное запросу;
  • количество выполненных слайсов*;
  • выделенное количество памяти под каждый слайс и другие параметры.

*Слайс – это независимая часть плана. Может выполняться как параллельно, так и последовательно с остальными частями. Каждый слайс может состоять из нескольких операторов.

Если включить дополнительные конфигурационные параметры, например, explain_memory_verbosity и gp_enable_explain_allstat, а вместо EXPLAIN ANALYZE выполнить EXPLAIN (ANALYZE, VERBOSE), можно получить ещё больше данных о состоянии памяти:

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

Тем, кто силён духом, можно попробовать выполнить ещё и EXPLAIN (ANALYZE, VERBOSE) SELECT к небольшой таблице с включёнными параметрами explain_memory_verbosity + gp_enable_explain_allstat. Результатом команды должен быть план запроса с подробными данными по операциям, которые выполняли сегменты при выполнении этого запроса с расширенной информацией по памяти. Разобраться в таком плане будет достаточно непросто, и сложность заключается в том, что этот план можно получить только после завершения выполнения запроса. А что, если запрос не выполняется и падает по памяти? Или необходимо посмотреть текущее потребление памяти? Или нужна информация по другим метрикам? Увы, но в этом случае EXPLAIN ANALYZE не помощник.

Способ №2. Использование системных представлений

Существует несколько системных представлений, которые можно использовать для анализа потребляемых ресурсов, таких как память и CPU.

2.1. Cхема gp_toolkit

Если в качестве контроля ресурсов используется механизм ресурсных групп, то любой запрос, который работает внутри Greenplum, всегда работает в рамках определённой ресурсной группы. Выбор ресурсной группы зависит от юзера, запустившего запрос, так как именно пользователи привязаны к конкретной ресурсной группе. Информацию о принадлежности запроса к конкретной ресурсной группе можно найти в системном представлении pg_stat_activity в поле rsgname. В случае, если необходимо понять, к какой ресурсной группе привязан пользователь, можно воспользоваться следующим запросом:

SELECT rolname, rsgname FROM pg_roles, pg_resgroup WHERE pg_roles.rolresgroup = pg_resgroup.oid;

В сборке от Arenadata Greenplum использует механизм ресурсных групп по умолчанию. В «ванильном» Greenplum по умолчанию используются ресурсные очереди.

При использовании механизма ресурсных групп для мониторинга памяти и CPU можно задействовать представления из схемы gp_toolkit.

-2

В Greenplum 5 и Greenplum 6 эти представления реализованы по-разному, поэтому расскажем про каждый отдельно.

Ознакомиться с полным текстом статьи можно в блоге Arenadata на «Хабре». А узнать больше о возможностях Arenadata DB можно здесь.