В этой статье мы рассказываем о трёх проверенных специалистами 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.
В Greenplum 5 и Greenplum 6 эти представления реализованы по-разному, поэтому расскажем про каждый отдельно.
Ознакомиться с полным текстом статьи можно в блоге Arenadata на «Хабре». А узнать больше о возможностях Arenadata DB можно здесь.