CREATE RESOURCE GROUP

Определяет новую группу ресурсов.

Синтаксис

CREATE RESOURCE GROUP name WITH (group_attribute=value [, ... ])

Где group_attribute:

CPU_RATE_LIMIT=integer | CPUSET=tuple
MEMORY_LIMIT=integer
[ CONCURRENCY=integer ]
[ MEMORY_SHARED_QUOTA=integer ]
[ MEMORY_SPILL_RATIO=integer ]
[ MEMORY_AUDITOR= {vmtracker | cgroup} ]

Описание

Создаёт новую группу ресурсов для управления ресурсами в базе данных YMatrix. Вы можете создавать группы ресурсов для управления ресурсами ролей или для управления ресурсами внешних компонентов базы данных YMatrix, таких как PL/Container.

Когда группа ресурсов включена, созданная вами группа ресурсов для управления ролью пользователя определяет ограничения на количество одновременных транзакций, память и процессорное время для этой роли. Такие группы ресурсов можно назначать одной или нескольким ролям.

Группа ресурсов, созданная для управления ресурсами, внешними по отношению к базе данных YMatrix (например, PL/Container), при включённой группе ресурсов определяет лимиты памяти и процессора для соответствующего компонента. Эти группы ресурсов используют cgroups для управления процессором и памятью. Назначение групп ресурсов внешним компонентам зависит от конкретного компонента. Например, при настройке среды выполнения PL/Container вы укажете группу ресурсов PL/Container. Группы ресурсов, созданные для внешних компонентов, нельзя назначать ролям, так же как и группы ресурсов, созданные для ролей, нельзя назначать внешним компонентам.

Для создания группы ресурсов необходимо обладать привилегией SUPERUSER. Максимальное количество групп ресурсов в кластере базы данных YMatrix — 100.

В базе данных YMatrix заранее определены две группы ресурсов по умолчанию: admin_group и default_group. Эти имена групп, а также имя none являются зарезервированными.

Чтобы правильно установить ограничения для групп ресурсов, администратор базы данных YMatrix должен знать типичные запросы, выполняемые в системе, пользователей/роли, которые их запускают, и используемые ими внешние компоненты, такие как PL/Container.

После создания группы ресурсов она назначается одной или нескольким ролям с помощью команды ALTER ROLE или CREATE ROLE.

После создания группы ресурсов для управления ресурсами процессора и памяти внешних компонентов необходимо настроить эти компоненты на использование данной группы ресурсов. Например, задать параметр resource_group_id для среды выполнения PL/Container.

Параметры

name

  • Имя группы ресурсов.

CONCURRENCY integer

  • Максимальное количество одновременных транзакций, разрешённых для этой группы ресурсов, включая активные и бездействующие. Значение CONCURRENCY должно быть целым числом в диапазоне [0.. max_connections]. Значение по умолчанию для групп ресурсов, созданных для ролей, — 20.
    Для групп ресурсов, созданных для внешних компонентов, значение CONCURRENCY должно быть равно нулю (0).
    Примечание: Значение CONCURRENCY для группы admin_group нельзя устанавливать равным нулю (0).

CPU_RATE_LIMIT integer

CPUSET tuple

  • При создании группы ресурсов можно указать только один из параметров: CPU_RATE_LIMIT или CPUSET.
    CPU_RATE_LIMIT — процент процессорных ресурсов, выделенных группе ресурсов. Минимальное значение — 1%, максимальное — 100%. Сумма значений CPU_RATE_LIMIT для всех групп ресурсов в кластере базы данных YMatrix не должна превышать 100.
    CPUSET определяет ядра процессора, зарезервированные для данной группы ресурсов. Указанные в кортеже ядра должны быть доступны в системе и не могут пересекаться с ядрами, назначенными другим группам ресурсов.
    Кортеж представляет собой список номеров ядер, разделённых запятыми, с возможностью указания диапазонов. Кортеж должен быть заключён в одинарные кавычки, например: '1,3-4'.

MEMORY_LIMIT integer

  • Обязательный параметр. Общий процент ресурсов памяти базы данных YMatrix, выделенный данной группе ресурсов. Минимальное значение — 0%, максимальное — 100%. Если установлено значение 0, YMatrix не выделяет резервируемой памяти для группы, а использует глобальную общую память. В этом случае параметр MEMORY_SPILL_RATIO также должен быть равен 0.
    Сумма значений MEMORY_LIMIT для всех групп ресурсов в кластере базы данных YMatrix не может превышать 100. Если сумма меньше 100, оставшаяся часть используется как глобальная общая память.

MEMORY_SHARED_QUOTA integer

  • Доля общей памяти, доступной для совместного использования внутри группы ресурсов. Процент памяти, выделенной группе ресурсов, резервируется для совместного использования между транзакциями. Общая память распределяется по принципу «кто первый, тот и получает». Транзакции могут использовать часть или всю доступную общую память, либо не использовать её вообще. Минимальное значение — 0%, максимальное — 100%. Значение по умолчанию — 20%.

MEMORY_SPILL_RATIO integer

  • Пороговое значение использования памяти для операций, интенсивно потребляющих память, в рамках транзакции. При достижении этого порога данные транзакции выгружаются на диск. Минимальное значение — 0%, максимальное — 100%. Значение по умолчанию — 20%.

MEMORY_AUDITOR {vmtracker | cgroup}

  • Средство контроля памяти для групп ресурсов. База данных YMatrix использует отслеживание виртуальной памяти (vmtracker) для ресурсов ролей и отслеживание через cgroup — для ресурсов, используемых внешними компонентами. По умолчанию используется vmtracker.
    При создании группы ресурсов с использованием средства контроля памяти vmtracker база данных YMatrix самостоятельно отслеживает объём памяти, потребляемый группой ресурсов.
    Если при создании группы ресурсов указан MEMORY_AUDITOR cgroup, то учёт памяти передаётся cgroup. Для групп ресурсов, созданных для внешних компонентов (например, PL/Container), значение CONCURRENCY должно быть равно нулю (0). Такие группы ресурсов нельзя назначать ролям базы данных YMatrix.

Примечание

Нельзя выполнять команду CREATE RESOURCE GROUP внутри явной транзакции или подтранзакции.

Используйте системное представление gp_toolkit.gp_resgroup_config для просмотра текущих ограничений всех групп ресурсов:

SELECT * FROM gp_toolkit.gp_resgroup_config;

Примеры

Создание группы ресурсов с лимитами процессора и памяти по 35%:

CREATE RESOURCE GROUP rgroup1 WITH (CPU_RATE_LIMIT=35, MEMORY_LIMIT=35);

Создание группы ресурсов с лимитом одновременных транзакций 20, лимитом памяти 15% и лимитом процессора 25%:

CREATE RESOURCE GROUP rgroup2 WITH (CONCURRENCY=20, 
  MEMORY_LIMIT=15, CPU_RATE_LIMIT=25);

Создание группы ресурсов для управления ресурсами PL/Container с лимитами памяти и процессора по 10%:

CREATE RESOURCE GROUP plc_run1 WITH (MEMORY_LIMIT=10, CPU_RATE_LIMIT=10,
  CONCURRENCY=0, MEMORY_AUDITOR=cgroup);

Создание группы ресурсов с лимитом памяти 11% и назначение ядер процессора с 1 по 3:

CREATE RESOURCE GROUP rgroup3 WITH (CPUSET='1-3', MEMORY_LIMIT=11);

Совместимость

CREATE RESOURCE GROUP является расширением YMatrix. В стандарте SQL нет аналогичных конструкций для групп ресурсов или управления ресурсами.

См. также

ALTER RESOURCE GROUP, DROP RESOURCE GROUP