Перейти к основному содержимому

Группа ресурсов

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

resource group

С помощью этой функции вы можете одновременно выполнять несколько рабочих нагрузок в одном кластере, включая короткие запросы, ad-hoc запросы, ETL задачи, что позволяет сэкономить дополнительные расходы на развертывание нескольких кластеров. С технической точки зрения, движок выполнения будет планировать параллельные рабочие нагрузки в соответствии с пользовательскими спецификациями и изолировать взаимные помехи между ними.

Дорожная карта Resource Group:

  • Начиная с версии 1.5.0, Selena поддерживает ограничение потребления ресурсов для запросов и реализацию изоляции и эффективного использования ресурсов между арендаторами в одном кластере.
  • В Selena версии 2.3 вы можете дополнительно ограничить потребление ресурсов для больших запросов и предотвратить истощение ресурсов кластера слишком большими запросами, чтобы гарантировать стабильность системы.
  • Selena версии 2.5 поддерживает ограничение потребления вычислительных ресурсов для загрузки данных (INSERT).
  • Начиная с версии 1.5.0, Selena поддерживает установку жестких ограничений на ресурсы CPU.
Internal TableExternal TableBig Query RestrictionINSERT INTOBroker LoadRoutine Load, Stream Load, Schema ChangeCPU Hard Limit
2.2×××××x
2.3×××x
2.5××x
3.1 & 3.2×x
3.3.5 и позднее×

Термины

В этом разделе описываются термины, которые необходимо понимать перед использованием функции группы ресурсов.

resource group

Каждая группа ресурсов представляет собой набор вычислительных ресурсов от конкретного BE. Вы можете разделить каждый BE вашего кластера на несколько групп ресурсов. Когда запрос назначается группе ресурсов, 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] (обязательно)-
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, выделяемого задачам из этой группы. До версии 3.3.5 это называлось 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].

spill_mem_limit_threshold

Определяет порог использования памяти, который запускает сброс на диск. Диапазон значений (0,1], по умолчанию 1 (неактивно). Введен в версии 3.1.7.

  • Когда автоматический сброс включен (spill_mode установлен в auto), но группы ресурсов отключены, система будет сбрасывать промежуточные результаты на диск, когда использование памяти запроса превышает 80% от query_mem_limit.
  • Когда группы ресурсов включены, сброс произойдет, если:
    • Общее использование памяти всех запросов в группе превышает текущий лимит памяти BE * mem_limit * spill_mem_limit_threshold, или
    • Использование памяти текущего запроса превышает 80% от query_mem_limit.

Параметры параллелизма запросов

concurrency_limit

Определяет максимальное количество одновременных запросов в группе ресурсов для предотвращения перегрузки системы. Действует только при значении больше 0, значение по умолчанию 0.

Параметры ресурсов больших запросов

Вы можете настроить ограничения ресурсов специально для больших запросов, используя следующие параметры:

big_query_cpu_second_limit

Указывает максимальное время CPU (в секундах), которое могут использовать задачи больших запросов на каждом узле BE, суммируя фактическое время CPU, используемое параллельными задачами. Действует только при значении больше 0, значение по умолчанию 0.

big_query_scan_rows_limit

Устанавливает ограничение на количество строк, которые могут сканировать задачи больших запросов на каждом узле BE. Действует только при значении больше 0, значение по умолчанию 0.

big_query_mem_limit

Определяет максимальную память, которую могут использовать задачи больших запросов на каждом узле BE, в байтах. Действует только при значении больше 0, значение по умолчанию 0.

ПРИМЕЧАНИЕ

Когда запрос, выполняющийся в группе ресурсов, превышает указанные выше ограничения больших запросов, запрос будет прерван с ошибкой. Вы также можете просмотреть сообщения об ошибках в столбце ErrorCode файла fe.audit.log узла FE.

Type (Устарел с версии 3.3.5)

До версии 3.3.5 Selena позволяла устанавливать type группы ресурсов в short_query. Однако параметр type был устарел и заменен на exclusive_cpu_cores. Для любых существующих групп ресурсов этого типа система автоматически преобразует их в Эксклюзивную группу ресурсов, где значение exclusive_cpu_cores равно cpu_weight после обновления до версии 3.3.5.

Системно-определенные группы ресурсов

В каждом экземпляре Selena есть две системно-определенные группы ресурсов: default_wg и default_mv_wg. Вы можете изменить конфигурацию системно-определенных групп ресурсов с помощью команды ALTER RESOURCE GROUP, но вы не можете определить классификаторы для них или удалить системно-определенные группы ресурсов.

default_wg

default_wg будет назначена обычным запросам, которые находятся под управлением групп ресурсов, но не соответствуют ни одному классификатору. Ограничения ресурсов по умолчанию для default_wg следующие:

  • cpu_weight: Количество ядер CPU BE.
  • mem_limit: 100%.
  • concurrency_limit: 0.
  • big_query_cpu_second_limit: 0.
  • big_query_scan_rows_limit: 0.
  • big_query_mem_limit: 0.
  • spill_mem_limit_threshold: 1.
default_mv_wg

default_mv_wg будет назначена задачам обновления асинхронных материализованных представлений, если группа ресурсов не выделена соответствующему материализованному представлению в свойстве resource_group при создании материализованного представления. Ограничения ресурсов по умолчанию для default_mv_wg следующие:

  • cpu_weight: 1.
  • mem_limit: 80%.
  • concurrency_limit: 0.
  • spill_mem_limit_threshold: 80%.

classifier

Каждый классификатор содержит одно или несколько условий, которые могут быть сопоставлены со свойствами запросов. Selena определяет классификатор, который лучше всего соответствует каждому запросу на основе условий соответствия, и выделяет ресурсы для выполнения запроса.

Классификаторы поддерживают следующие условия:

  • user: имя пользователя.
  • role: роль пользователя.
  • query_type: тип запроса. Поддерживаются SELECT и INSERT (с версии 2.5). Когда задачи INSERT INTO или BROKER LOAD попадают в группу ресурсов с query_type как insert, узел BE резервирует указанные ресурсы CPU для задач.
  • source_ip: блок CIDR, из которого инициируется запрос.
  • db: база данных, к которой обращается запрос. Может быть указана строками, разделенными запятыми ,.
  • plan_cpu_cost_range: Оценочный диапазон стоимости CPU запроса. Формат (DOUBLE, DOUBLE]. Значение по умолчанию NULL, указывающее на отсутствие такого ограничения. Столбец PlanCpuCost в fe.audit.log представляет оценку системы стоимости CPU для запроса. Этот параметр поддерживается с версии 3.1.4.
  • plan_mem_cost_range: Системно-оценочный диапазон стоимости памяти запроса. Формат (DOUBLE, DOUBLE]. Значение по умолчанию NULL, указывающее на отсутствие такого ограничения. Столбец PlanMemCost в fe.audit.log представляет оценку системы стоимости памяти для запроса. Этот параметр поддерживается с версии 3.1.4.

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

ПРИМЕЧАНИЕ

Вы можете просмотреть группу ресурсов, к которой принадлежит запрос, в столбце ResourceGroup файла fe.audit.log узла FE или выполнив EXPLAIN VERBOSE <query>, как описано в Просмотр группы ресурсов запроса.

Selena вычисляет степень соответствия между запросом и классификатором, используя следующие правила:

  • Если классификатор имеет то же значение user, что и запрос, степень соответствия классификатора увеличивается на 1.
  • Если классификатор имеет то же значение role, что и запрос, степень соответствия классификатора увеличивается на 1.
  • Если классификатор имеет то же значение query_type, что и запрос, степень соответствия классификатора увеличивается на 1 плюс число, полученное из следующего вычисления: 1/Количество полей query_type в классификаторе.
  • Если классификатор имеет то же значение source_ip, что и запрос, степень соответствия классификатора увеличивается на 1 плюс число, полученное из следующего вычисления: (32 - cidr_prefix)/64.
  • Если классификатор имеет то же значение db, что и запрос, степень соответствия классификатора увеличивается на 10.
  • Если стоимость CPU запроса попадает в plan_cpu_cost_range, степень соответствия классификатора увеличивается на 1.
  • Если стоимость памяти запроса попадает в plan_mem_cost_range, степень соответствия классификатора увеличивается на 1.

Если несколько классификаторов соответствуют запросу, классификатор с большим количеством условий имеет более высокую степень соответствия.

-- Классификатор B имеет больше условий, чем классификатор A. Поэтому классификатор B имеет более высокую степень соответствия, чем классификатор A.


classifier A (user='Alice')


classifier B (user='Alice', source_ip = '192.168.1.0/24')

Если несколько соответствующих классификаторов имеют одинаковое количество условий, классификатор, условия которого описаны более точно, имеет более высокую степень соответствия.

-- Блок CIDR, указанный в классификаторе B, меньше по диапазону, чем в классификаторе A. Поэтому классификатор B имеет более высокую степень соответствия, чем классификатор A.
classifier A (user='Alice', source_ip = '192.168.1.0/16')
classifier B (user='Alice', source_ip = '192.168.1.0/24')

-- Классификатор C имеет меньше типов запросов, указанных в нем, чем классификатор D. Поэтому классификатор C имеет более высокую степень соответствия, чем классификатор D.
classifier C (user='Alice', query_type in ('select'))
classifier D (user='Alice', query_type in ('insert','select'))

Если несколько классификаторов имеют одинаковую степень соответствия, один из классификаторов будет выбран случайно.

-- Если запрос одновременно запрашивает и db1, и db2, и классификаторы E и F имеют 
-- наивысшую степень соответствия среди попавших классификаторов, один из E и F будет выбран случайно.
classifier E (db='db1')
classifier F (db='db2')

Изоляция вычислительных ресурсов

Вы можете изолировать вычислительные ресурсы между запросами, настроив группы ресурсов и классификаторы.

Включение групп ресурсов

Для использования группы ресурсов необходимо включить Pipeline Engine для вашего кластера Selena:

-- Включить Pipeline Engine в текущей сессии.
SET enable_pipeline_engine = true;
-- Включить Pipeline Engine глобально.
SET GLOBAL enable_pipeline_engine = true;

ПРИМЕЧАНИЕ

Начиная с версии 1.5.0, Resource Group включена по умолчанию, и переменная сессии enable_resource_group устарела.

Создание групп ресурсов и классификаторов

Выполните следующий оператор для создания группы ресурсов, связывания группы ресурсов с классификатором и выделения вычислительных ресурсов группе ресурсов:

CREATE RESOURCE GROUP <group_name> 
TO (
user='string',
role='string',
query_type in ('select'),
source_ip='cidr'
) --Создать классификатор. Если вы создаете более одного классификатора, разделите классификаторы запятыми (`,`).
WITH (
"{ cpu_weight | exclusive_cpu_cores }" = "INT",
"mem_limit" = "m%",
"concurrency_limit" = "INT",
"type" = "str" --Тип группы ресурсов. Установите значение normal.
);

Пример:

CREATE RESOURCE GROUP rg1
TO
(user='rg1_user1', role='rg1_role1', query_type in ('select'), source_ip='192.168.x.x/24'),
(user='rg1_user2', query_type in ('select'), source_ip='192.168.x.x/24'),
(user='rg1_user3', source_ip='192.168.x.x/24'),
(user='rg1_user4'),
(db='db1')
WITH (
'exclusive_cpu_cores' = '10',
'mem_limit' = '20%',
'big_query_cpu_second_limit' = '100',
'big_query_scan_rows_limit' = '100000',
'big_query_mem_limit' = '1073741824'
);

Указание группы ресурсов (Опционально)

Вы можете указать группу ресурсов для текущей сессии напрямую, включая default_wg и default_mv_wg.

SET resource_group = 'group_name';

Просмотр групп ресурсов и классификаторов

Выполните следующий оператор для запроса всех групп ресурсов и классификаторов:

SHOW RESOURCE GROUPS ALL;

Выполните следующий оператор для запроса групп ресурсов и классификаторов авторизованного пользователя:

SHOW RESOURCE GROUPS;

Выполните следующий оператор для запроса указанной группы ресурсов и ее классификаторов:

SHOW RESOURCE GROUP group_name;

Пример:

mysql> SHOW RESOURCE GROUPS ALL;
+---------------+-------+------------+---------------------+-----------+----------------------------+---------------------------+---------------------+-------------------+---------------------------+----------------------------------------+
| name | id | cpu_weight | exclusive_cpu_cores | mem_limit | big_query_cpu_second_limit | big_query_scan_rows_limit | big_query_mem_limit | concurrency_limit | spill_mem_limit_threshold | classifiers |
+---------------+-------+------------+---------------------+-----------+----------------------------+---------------------------+---------------------+-------------------+---------------------------+----------------------------------------+
| default_mv_wg | 3 | 1 | 0 | 80.0% | 0 | 0 | 0 | null | 80% | (id=0, weight=0.0) |
| default_wg | 2 | 1 | 0 | 100.0% | 0 | 0 | 0 | null | 100% | (id=0, weight=0.0) |
| rge1 | 15015 | 0 | 6 | 90.0% | 0 | 0 | 0 | null | 100% | (id=15016, weight=1.0, user=rg1_user) |
| rgs1 | 15017 | 8 | 0 | 90.0% | 0 | 0 | 0 | null | 100% | (id=15018, weight=1.0, user=rgs1_user) |
| rgs2 | 15019 | 8 | 0 | 90.0% | 0 | 0 | 0 | null | 100% | (id=15020, weight=1.0, user=rgs2_user) |
+---------------+-------+------------+---------------------+-----------+----------------------------+---------------------------+---------------------+-------------------+---------------------------+----------------------------------------+

ПРИМЕЧАНИЕ

В приведенном выше примере weight указывает степень соответствия.

Для запроса всех полей группы ресурсов, включая устаревшие поля.

Добавив ключевое слово VERBOSE к трем вышеупомянутым командам, вы можете просмотреть все поля группы ресурсов, включая устаревшие, такие как type и max_cpu_cores.

SHOW VERBOSE RESOURCE GROUPS ALL;
SHOW VERBOSE RESOURCE GROUPS;
SHOW VERBOSE RESOURCE GROUP group_name;

Управление группами ресурсов и классификаторами

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

Выполните следующий оператор для изменения квот ресурсов для существующей группы ресурсов:

ALTER RESOURCE GROUP group_name WITH (
'cpu_core_limit' = 'INT',
'mem_limit' = 'm%'
);

Выполните следующий оператор для удаления группы ресурсов:

DROP RESOURCE GROUP group_name;

Выполните следующий оператор для добавления классификатора в группу ресурсов:

ALTER RESOURCE GROUP <group_name> ADD (user='string', role='string', query_type in ('select'), source_ip='cidr');

Выполните следующий оператор для удаления классификатора из группы ресурсов:

ALTER RESOURCE GROUP <group_name> DROP (CLASSIFIER_ID_1, CLASSIFIER_ID_2, ...);

Выполните следующий оператор для удаления всех классификаторов группы ресурсов:

ALTER RESOURCE GROUP <group_name> DROP ALL;

Наблюдение за группами ресурсов

Просмотр группы ресурсов запроса

Для запросов, которые еще не были выполнены, вы можете просмотреть группу ресурсов, соответствующую запросу, из поля RESOURCE GROUP, возвращаемого EXPLAIN VERBOSE <query>.

Пока запрос выполняется, вы можете проверить, какую группу ресурсов попал запрос, из поля ResourceGroup, возвращаемого SHOW PROC '/current_queries' и SHOW PROC '/global_current_queries'.

После завершения запроса вы можете просмотреть группу ресурсов, которой соответствовал запрос, проверив поле ResourceGroup в файле fe.audit.log на узле FE.

  • Если запрос не находится под управлением групп ресурсов, значение столбца - пустая строка "".
  • Если запрос находится под управлением групп ресурсов, но не соответствует ни одному классификатору, значение столбца - пустая строка "". Но этот запрос назначается группе ресурсов по умолчанию default_wg.

Мониторинг групп ресурсов

Вы можете настроить мониторинг и оповещения для ваших групп ресурсов.

Метрики FE и BE, связанные с группами ресурсов, следующие. Все метрики ниже имеют метку name, указывающую их соответствующую группу ресурсов.

Метрики FE

Следующие метрики FE предоставляют статистику только в пределах текущего узла FE:

МетрикаЕдиницаТипОписание
starrocks_fe_query_resource_groupКоличествоМгновенноеКоличество запросов, исторически выполненных в этой группе ресурсов (включая те, которые выполняются в настоящее время).
starrocks_fe_query_resource_group_latencyмсМгновенноеПроцентиль задержки запросов для этой группы ресурсов. Метка type указывает конкретные процентили, включая mean, 75_quantile, 95_quantile, 98_quantile, 99_quantile, 999_quantile.
starrocks_fe_query_resource_group_errКоличествоМгновенноеКоличество запросов в этой группе ресурсов, которые столкнулись с ошибкой.
starrocks_fe_resource_group_query_queue_totalКоличествоМгновенноеОбщее количество запросов, исторически поставленных в очередь в этой группе ресурсов (включая те, которые выполняются в настоящее время). Эта метрика поддерживается с версии 3.1.4. Она действительна только при включенных очередях запросов.
starrocks_fe_resource_group_query_queue_pendingКоличествоМгновенноеКоличество запросов, находящихся в настоящее время в очереди этой группы ресурсов. Эта метрика поддерживается с версии 3.1.4. Она действительна только при включенных очередях запросов.
starrocks_fe_resource_group_query_queue_timeoutКоличествоМгновенноеКоличество запросов в этой группе ресурсов, которые истекли по времени ожидания в очереди. Эта метрика поддерживается с версии 3.1.4. Она действительна только при включенных очередях запросов.

Метрики BE

МетрикаЕдиницаТипОписание
resource_group_running_queriesКоличествоМгновенноеКоличество запросов, выполняющихся в настоящее время в этой группе ресурсов.
resource_group_total_queriesКоличествоМгновенноеКоличество запросов, исторически выполненных в этой группе ресурсов (включая те, которые выполняются в настоящее время).
resource_group_bigquery_countКоличествоМгновенноеКоличество запросов в этой группе ресурсов, которые вызвали ограничение больших запросов.
resource_group_concurrency_overflow_countКоличествоМгновенноеКоличество запросов в этой группе ресурсов, которые вызвали ограничение concurrency_limit.
resource_group_mem_limit_bytesБайтыМгновенноеЛимит памяти для этой группы ресурсов.
resource_group_mem_inuse_bytesБайтыМгновенноеПамять, используемая в настоящее время этой группой ресурсов.
resource_group_cpu_limit_ratioПроцентМгновенноеОтношение cpu_core_limit этой группы ресурсов к общему cpu_core_limit по всем группам ресурсов.
resource_group_inuse_cpu_coresКоличествоСреднееОценочное количество ядер CPU, используемых этой группой ресурсов. Это значение является приблизительной оценкой. Оно представляет среднее значение, вычисленное на основе статистики из двух последовательных сборов метрик. Эта метрика поддерживается с версии 3.1.4.
resource_group_cpu_use_ratioПроцентСреднееУстарело Отношение временных срезов потоков Pipeline, используемых этой группой ресурсов, к общим временным срезам потоков Pipeline, используемых всеми группами ресурсов. Оно представляет среднее значение, вычисленное на основе статистики из двух последовательных сборов метрик.
resource_group_connector_scan_use_ratioПроцентСреднееУстарело Отношение временных срезов потоков Scan внешних таблиц, используемых этой группой ресурсов, к общим временным срезам потоков Pipeline, используемых всеми группами ресурсов. Оно представляет среднее значение, вычисленное на основе статистики из двух последовательных сборов метрик.
resource_group_scan_use_ratioПроцентСреднееУстарело Отношение временных срезов потоков Scan внутренних таблиц, используемых этой группой ресурсов, к общим временным срезам потоков Pipeline, используемых всеми группами ресурсов. Оно представляет среднее значение, вычисленное на основе статистики из двух последовательных сборов метрик.

Просмотр информации об использовании групп ресурсов

Начиная с версии 1.5.0, Selena поддерживает SQL-оператор SHOW USAGE RESOURCE GROUPS, который используется для отображения информации об использовании каждой группы ресурсов по BE. Описания каждого поля следующие:

  • Name: Имя группы ресурсов.
  • Id: ID группы ресурсов.
  • Backend: IP или FQDN BE.
  • BEInUseCpuCores: Количество ядер CPU, используемых в настоящее время этой группой ресурсов на этом BE. Это значение является приблизительной оценкой.
  • BEInUseMemBytes: Количество байт памяти, используемых в настоящее время этой группой ресурсов на этом BE.
  • BERunningQueries: Количество запросов из этой группы ресурсов, которые все еще выполняются на этом BE.

Обратите внимание:

  • BE периодически сообщают эту информацию об использовании ресурсов Leader FE с интервалом, указанным в report_resource_usage_interval_ms, который по умолчанию установлен в 1 секунду.
  • Результаты будут показывать только строки, где по крайней мере одно из BEInUseCpuCores/BEInUseMemBytes/BERunningQueries является положительным числом. Другими словами, информация отображается только тогда, когда группа ресурсов активно использует некоторые ресурсы на BE.

Пример:

MySQL [(none)]> SHOW USAGE RESOURCE GROUPS;
+------------+----+-----------+-----------------+-----------------+------------------+
| Name | Id | Backend | BEInUseCpuCores | BEInUseMemBytes | BERunningQueries |
+------------+----+-----------+-----------------+-----------------+------------------+
| default_wg | 0 | 127.0.0.1 | 0.100 | 1 | 5 |
+------------+----+-----------+-----------------+-----------------+------------------+
| default_wg | 0 | 127.0.0.2 | 0.200 | 2 | 6 |
+------------+----+-----------+-----------------+-----------------+------------------+
| wg1 | 0 | 127.0.0.1 | 0.300 | 3 | 7 |
+------------+----+-----------+-----------------+-----------------+------------------+
| wg2 | 0 | 127.0.0.1 | 0.400 | 4 | 8 |
+------------+----+-----------+-----------------+-----------------+------------------+

Просмотр информации о потоках для Эксклюзивных и Общих групп ресурсов

Выполнение запросов в основном включает три пула потоков: pip_exec, pip_scan и pip_con_scan.

  • Эксклюзивные группы ресурсов работают в своих выделенных пулах потоков и привязаны к Эксклюзивным ядрам CPU, выделенным им.
  • Общие группы ресурсов работают в общих пулах потоков и привязаны к оставшимся Общим ядрам CPU.

Потоки в этих трех пулах следуют соглашению об именовании { pip_exec | pip_scan | pip_con_scan }_{ com | <resource_group_id> }, где com относится к общему пулу потоков, а <resource_group_id> относится к ID Эксклюзивной группы ресурсов.

Вы можете просмотреть информацию о CPU, привязанную к каждому потоку BE, через системно-определенное представление information_schema.be_threads. Поля BE_ID, NAME и BOUND_CPUS представляют ID BE, имя потока и количество ядер CPU, привязанных к этому потоку, соответственно.

select * from information_schema.be_threads where name like '%pip_exec%';
select * from information_schema.be_threads where name like '%pip_scan%';
select * from information_schema.be_threads where name like '%pip_con_scan%';

Пример:

select BE_ID, NAME, FINISHED_TASKS, BOUND_CPUS from information_schema.be_threads where name like '%pip_exec_com%' and be_id = 10223;
+-------+--------------+----------------+------------+
| BE_ID | NAME | FINISHED_TASKS | BOUND_CPUS |
+-------+--------------+----------------+------------+
| 10223 | pip_exec_com | 2091295 | 10 |
| 10223 | pip_exec_com | 2088025 | 10 |
| 10223 | pip_exec_com | 1637603 | 6 |
| 10223 | pip_exec_com | 1641260 | 6 |
| 10223 | pip_exec_com | 1634197 | 6 |
| 10223 | pip_exec_com | 1633804 | 6 |
| 10223 | pip_exec_com | 1638184 | 6 |
| 10223 | pip_exec_com | 1636374 | 6 |
| 10223 | pip_exec_com | 2095951 | 10 |
| 10223 | pip_exec_com | 2095248 | 10 |
| 10223 | pip_exec_com | 2098745 | 10 |
| 10223 | pip_exec_com | 2085338 | 10 |
| 10223 | pip_exec_com | 2101221 | 10 |
| 10223 | pip_exec_com | 2093901 | 10 |
| 10223 | pip_exec_com | 2092364 | 10 |
| 10223 | pip_exec_com | 2091366 | 10 |
+-------+--------------+----------------+------------+