Группа ресурсов
В этом разделе описывается функция группы ресурсов в Selena.

С помощью этой функции вы можете одновременно запускать несколько рабочих нагрузок в одном cluster, включая короткие запросы, ad-hoc запросы, ETL-задания, чтобы сэкономить дополнительные затраты на развёртывание нескольких cluster. С технической точки зрения, движок выполнения планирует параллельные рабочие нагрузки в соответствии со спецификациями поль зователей и изолирует помехи между ними.
Дорожная карта группы ресурсов:
- Начиная с версии v1.5.2, Selena поддерживает ограничение потребления ресурсов для запросов и реализацию изоляции и эффективного использования ресурсов между арендаторами в одном cluster.
- В Selena v1.5.2 вы можете дополнительно ограничить потребление ресурсов для больших запросов и предотвратить исчерпание ресурсов cluster чрезмерно большими запросами, чтобы гарантировать стабильность системы.
- Selena v1.5.2 поддерживает ограничение потребления вычислительных ресурсов для загрузки данных (INSERT).
- Начиная с версии v1.5.2, Selena поддерживает наложение жёстких ограничений на ресурсы CPU.
| Внутренняя таблица | Внешняя таблица | Ограничение больших запросов | INSERT INTO | Broker Load | Routine Load, Stream Load, Schema Change | Жёсткий лимит CPU | |
|---|---|---|---|---|---|---|---|
| 2.2 | √ | × | × | × | × | × | x |
| 2.3 | √ | √ | √ | × | × | × | x |
| 2.5 | √ | √ | √ | √ | × | × | x |
| 3.1 & 3.2 | √ | √ | √ | √ | √ | × | x |
| 3.3.5 и позже | √ | √ | √ | √ | √ | × | √ |
Термины
В этом разделе описываются термины, которые необходимо понять перед использованием функции группы ресурсов.
Группа ресурсов
Каждая группа ресурсов — это набор вычислительных ресурсов с определённого BE. Вы можете разделить каждый BE вашего cluster на несколько групп ресурсов. Когда запрос назначается группе ресурсов, Selena выделяет ресурсы CPU и памяти для группы ресурсов на основе квот ресурсов, которые вы указали для группы ресурсов.
Вы можете указать квоты ресурсов CPU и памяти для группы ресурсов на BE, используя следующие параметры:
| Параметр | Описание | Диапазон значений | По умолчанию |
|---|---|---|---|
| cpu_weight | Вес планирования CPU этой группы ресурсов на узле BE. | (0, avg_be_cpu_cores] (действует при значении больше 0) | 0 |
| exclusive_cpu_cores | Параметр жёсткой изоляции CPU для этой группы ресурсов. | (0, min_be_cpu_cores - 1] (действует при значении больше 0) | 0 |
| mem_limit | Процент памяти, доступной для запросов этой группы ресурсов на текущем узле BE. | (0, 1] (обязательно) | - |
| mem_pool | Группирует группы ресурсов для совместного использования лимита памяти. | Строка | default_mem_pool |
| spill_mem_limit_threshold | Порог использования памяти, который вызывает сброс на диск. | (0, 1] | 1.0 |
| concurrency_limit | Максимальное количество параллельных запросов в этой группе ресурсов. | Целое число (действует при значении больше 0) | 0 |
| big_query_cpu_second_limit | Максимальное время CPU (в секундах) для задач больших запросов на каждом узле BE. | Целое число (действует при значении больше 0) | 0 |
| big_query_scan_rows_limit | Максимальное количество строк, которые задачи больших запросов могут сканировать на каждом узле BE. | Целое число (действует при значении больше 0) | 0 |
| big_query_mem_limit | Максимальная память, которую задачи больших запросов могут использовать на каждом узле BE. | Целое число (действует при знач ении больше 0) | 0 |
Параметры ресурсов CPU
cpu_weight
Этот параметр указывает вес планирования CPU группы ресурсов на одном узле BE, определяя относительную долю времени CPU, выделенную задачам из этой группы. До версии v1.5.2 это называлось cpu_core_limit.
Диапазон значений: (0, avg_be_cpu_cores], где avg_be_cpu_cores — среднее количество ядер CPU на всех узлах BE. Параметр действует только при значении больше 0. Должен быть установлен либо cpu_weight, либо exclusive_cpu_cores больше 0, но не оба одновременно.
ПРИМЕЧАНИЕ
Например, предположим, что три группы ресурсов rg1, rg2 и rg3 имеют значения cpu_weight 2, 6 и 8 соответственно. На полностью загруженном узле BE эти группы получат 12.5%, 37.5% и 50% времени CPU. Если узел не полностью загружен и rg1 и rg2 под нагрузкой, а rg3 простаивает, rg1 и rg2 получа т 25% и 75% времени CPU соответственно.
exclusive_cpu_cores
Этот параметр определяет жёсткий лимит CPU для группы ресурсов. Он имеет два значения:
- Эксклюзивность: Резервирует
exclusive_cpu_coresядер CPU исключительно для этой группы ресурсов, делая их недоступными для других групп, даже когда они простаивают. - Квота: Ограничивает группу ресурсов использованием только этих зарезервированных ядер CPU, предотвращая использование доступных ресурсов CPU из других групп.
Диапазон значений: (0, min_be_cpu_cores - 1], где min_be_cpu_cores — минимальное количество ядер CPU на всех узлах BE. Действует только при значении больше 0. Только один из cpu_weight или exclusive_cpu_cores может быть установлен больше 0.
- Группы ресурсов с
exclusive_cpu_coresбольше 0 называются Эксклюзивными группами ресурсов, а ядра CPU, выделенные им, называются Эксклюзивными ядрами. Другие группы называются Общими группами ресурсов и работают на Общих ядрах. - Общее количество
exclusive_cpu_coresпо всем группам ресурсов не может превышатьmin_be_cpu_cores - 1. Верхний предел установлен, чтобы оставить как минимум одно Общее ядро доступным.
Связь между exclusive_cpu_cores и cpu_weight:
Только один из cpu_weight или exclusive_cpu_cores может быть активен одновременно. Эксклюзивные группы ресурсов работают на своих собственных зарезервированных Эксклюзивных ядрах без необходимости делить время CPU через cpu_weight.
Вы можете настроить, могут ли Общие группы ресурсов заимствовать Эксклюзивные ядра у Эксклюзивных групп ресурсов, используя конфигурацию BE enable_resource_group_cpu_borrowing. При значении true (по умолчанию) Общие группы могут заимствовать ресурсы CPU, когда Эксклюзивные группы простаивают.
Чтобы изменить эту конфигурацию динамически, используйте следующую команду:
UPDATE information_schema.be_configs SET VALUE = "false" WHERE NAME = "enable_resource_group_cpu_borrowing";
Параметры ресурсов памяти
mem_limit
Указывает процент памяти (пул запросов), доступной для группы ресурсов на текущем узле BE. Диапазон значений: (0,1].