7.1.16 Группы ресурсов
MySQL поддерживает создание и управление группами ресурсов, а также позволяет назначать потоки, выполняемые в сервере, конкретным группам, чтобы потоки выполнялись в соответствии с ресурсами, доступными для группы. Атрибуты группы позволяют управлять её ресурсами, чтобы разрешить или ограничить потребление ресурсов потоками в группе. Администраторы баз данных могут изменять эти атрибуты в зависимости от различных рабочих нагрузок.
В настоящее время процессорное время является управляемым ресурсом, представленным концепцией «виртуального процессора», которая включает в себя ядра процессора, гиперпотоки, аппаратные потоки и т. д. Сервер определяет при запуске, сколько виртуальных процессоров доступно, и администраторы баз данных с соответствующими привилегиями могут ассоциировать эти процессоры с группами ресурсов и назначать потоки группам.
Например, для управления выполнением пакетных задач, которые не нуждаются в выполнении с высоким приоритетом, администратор базы данных может создать группу ресурсов Batch и настроить её приоритет вверх или вниз в зависимости от загруженности сервера. (Возможно, пакетные задачи, назначенные группе, должны выполняться с более низким приоритетом днём и с более высоким приоритетом ночью.) Администратор базы данных также может настроить набор процессоров, доступных для группы. Группы могут быть включены или выключены для управления тем, могут ли потоки быть им назначены.
В следующих разделах описываются аспекты использования групп ресурсов в MySQL:
На некоторых платформах или конфигурациях сервера MySQL группы ресурсов недоступны или имеют ограничения. В частности, системам Linux может потребоваться ручная процедура для некоторых методов установки. Более подробную информацию см. в разделе Ограничения групп ресурсов.
Элементы группы ресурсов
Эти возможности предоставляют SQL-интерфейс для управления группами ресурсов в MySQL:
SQL-команды позволяют создавать, изменять и удалять группы ресурсов, а также назначать потоки группам ресурсов. Подсказка оптимизатора позволяет назначать отдельные операторы группам ресурсов.
Привилегии на группы ресурсов предоставляют контроль над тем, какие пользователи могут выполнять операции с группами ресурсов.
Таблица
RESOURCE_GROUPSСхемы Информации предоставляет информацию о определениях групп ресурсов, а таблицаthreadsСхемы Производительности показывает назначение группы ресурсов для каждого потока.Переменные состояния предоставляют подсчеты выполнения каждой управляющей SQL-команды.
Атрибуты группы ресурсов
Группы ресурсов имеют атрибуты, определяющие группу. Все атрибуты могут быть установлены во время создания группы. Некоторые атрибуты фиксируются во время создания, а другие могут быть изменены в любое время после этого.
Эти атрибуты определяются при создании группы ресурсов и не могут быть изменены:
Каждая группа имеет имя. Имена групп ресурсов являются идентификаторами, как имена таблиц и столбцов, и не обязательно должны быть заключены в кавычки в SQL-командах, если они не содержат специальных символов или зарезервированных слов. Имена групп нечувствительны к регистру и могут иметь длину до 64 символов.
-
Каждая группа имеет тип, который является либо
SYSTEM, либоUSER. Тип группы ресурсов влияет на диапазон значений приоритетов, назначаемых группе, как описано ниже. Этот атрибут вместе с различиями в разрешенных приоритетах позволяет идентифицировать системные потоки, чтобы защитить их от конкуренции за ресурсы процессора с пользовательскими потоками.Системные и пользовательские потоки соответствуют фоновым и фоновым потокам, как указано в таблице
threadsСхемы Производительности.
Эти атрибуты определяются при создании группы ресурсов и могут быть изменены в любое время после этого:
Аффинити процессора — это набор виртуальных процессоров, которые может использовать группа ресурсов. Аффинити может быть любым непустым подмножеством доступных процессоров. Если у группы нет аффинити, она может использовать все доступные процессоры.
-
Приоритет потока — это приоритет выполнения для потоков, назначенных группе ресурсов. Значения приоритета варьируются от -20 (самый высокий приоритет) до 19 (самый низкий приоритет). Значение по умолчанию равно 0 для системных и пользовательских групп.
Системным группам разрешен более высокий приоритет, чем пользовательским группам, гарантируя, что пользовательские потоки никогда не имеют более высокого приоритета, чем системные потоки:
Для системных групп ресурсов разрешенный диапазон приоритетов от -20 до 0.
Для пользовательских групп ресурсов разрешенный диапазон приоритетов от 0 до 19.
Каждая группа может быть включена или выключена, что предоставляет администраторам контроль над назначением потоков. Потоки могут быть назначены только включенным группам.
Управление группами ресурсов
По умолчанию существует одна системная группа и одна группа пользователей, соответственно, с именами SYS_default и USR_default. Эти группы по умолчанию нельзя удалить, и их атрибуты нельзя изменить. Каждая группа по умолчанию не имеет сродства с процессором и приоритет 0.
Новым созданным системным и пользовательским потокам соответственно назначаются группы SYS_default и USR_default.
Для определенных пользователем групп ресурсов все атрибуты назначаются во время создания группы. После создания группы ее атрибуты могут быть изменены, за исключением атрибутов имени и типа.
Для создания и управления определенными пользователем группами ресурсов используйте эти SQL-запросы:
CREATE RESOURCE GROUPсоздаёт новую группу. См. Раздел 15.7.2.2, «Запрос CREATE RESOURCE GROUP».ALTER RESOURCE GROUPизменяет существующую группу. См. Раздел 15.7.2.1, «Запрос ALTER RESOURCE GROUP».DROP RESOURCE GROUPудаляет существующую группу. См. Раздел 15.7.2.3, «Запрос DROP RESOURCE GROUP».
Эти запросы требуют привилегии RESOURCE_GROUP_ADMIN.
Для управления назначением групп ресурсов используйте эти возможности:
SET RESOURCE GROUPназначает потоки в группу. См. Раздел 15.7.2.4, «Запрос SET RESOURCE GROUP».Указание оптимизатора
RESOURCE_GROUPназначает отдельные запросы в группу. См. Раздел 10.9.3, «Указания оптимизатора».
Эти операции требуют привилегии RESOURCE_GROUP_ADMIN или RESOURCE_GROUP_USER.
Определения групп ресурсов хранятся в таблице словаря данных resource_groups, чтобы группы сохранялись после перезагрузки сервера. Поскольку resource_groups является частью словаря данных, она не доступна пользователям напрямую. Информация о группах ресурсов доступна через таблицу схемы информации RESOURCE_GROUPS, которая реализована как представление на таблице словаря данных. См. Раздел 28.3.27, «Таблица INFORMATION_SCHEMA RESOURCE_GROUPS».
Изначально таблица RESOURCE_GROUPS содержит эти строки, описывающие группы по умолчанию:
mysql> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS\G
*************************** 1. row ***************************
RESOURCE_GROUP_NAME: USR_default
RESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1
VCPU_IDS: 0-3
THREAD_PRIORITY: 0
*************************** 2. row ***************************
RESOURCE_GROUP_NAME: SYS_default
RESOURCE_GROUP_TYPE: SYSTEM
RESOURCE_GROUP_ENABLED: 1
VCPU_IDS: 0-3
THREAD_PRIORITY: 0
Значения THREAD_PRIORITY равны 0, что указывает на приоритет по умолчанию. Значения VCPU_IDS показывают диапазон, включающий все доступные ЦП. Для групп по умолчанию отображаемое значение зависит от системы, на которой работает сервер MySQL.
Ранее обсуждался сценарий с группой ресурсов с именем Batch для управления выполнением пакетных задач, которым не требуется выполнение с высоким приоритетом. Для создания такой группы используйте запрос, подобный этому:
CREATE RESOURCE GROUP Batch
TYPE = USER
VCPU = 2-3 -- assumes a system with at least 4 CPUs
THREAD_PRIORITY = 10;
Для проверки того, что группа ресурсов была создана как ожидалось, проверьте таблицу RESOURCE_GROUPS:
mysql> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS
WHERE RESOURCE_GROUP_NAME = 'Batch'\G
*************************** 1. row ***************************
RESOURCE_GROUP_NAME: Batch
RESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1
VCPU_IDS: 2-3
THREAD_PRIORITY: 10
Если значение THREAD_PRIORITY равно 0, а не 10, проверьте, не ограничивает ли ваша платформа или конфигурация системы возможность использования группы ресурсов; см. Ограничения группы ресурсов.
Для назначения потока в группу Batch сделайте следующее:
SET RESOURCE GROUP Batch FOR thread_id;
После этого запросы в именованном потоке выполняются с ресурсами группы Batch.
Если текущий поток сессии должен находиться в группе Batch, выполните этот запрос в сессии:
SET RESOURCE GROUP Batch;
После этого запросы в сессии выполняются с ресурсами группы Batch.
Для выполнения одного запроса с помощью группы Batch используйте указание оптимизатора RESOURCE_GROUP:
INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);
Потоки, назначенные в группу Batch, выполняют запросы с её ресурсами, которые могут быть изменены по желанию:
-
В моменты высокой загрузки системы уменьшите количество ЦП, назначенных группе, понизьте её приоритет или (как показано) оба показателя:
ALTER RESOURCE GROUP Batch VCPU = 3 THREAD_PRIORITY = 19;
-
В моменты низкой загрузки системы увеличьте количество ЦП, назначенных группе, повысьте её приоритет или (как показано) оба показателя:
ALTER RESOURCE GROUP Batch VCPU = 0-3 THREAD_PRIORITY = 0;
Репликация групп ресурсов
Управление группами ресурсов локально на сервере, на котором оно происходит. Запросы SQL для управления группами ресурсов и изменения в таблице словаря данных resource_groups не записываются в двоичный журнал и не реплицируются.
Ограничения на использование групп ресурсов
На некоторых платформах или при конфигурации сервера MySQL группы ресурсов недоступны или имеют ограничения:
-
Группы ресурсов недоступны, если установлен плагин пула потоков.
Группы ресурсов недоступны на macOS, так как нет API для привязки процессоров к потокам.
-
В FreeBSD и Solaris приоритеты потоков групп ресурсов игнорируются. (Все потоки фактически работают с приоритетом 0.) Попытки изменить приоритеты приводят к предупреждению:
mysql>
ALTER RESOURCE GROUP abc THREAD_PRIORITY = 10;Query OK, 0 rows affected, 1 warning (0.18 sec) mysql>SHOW WARNINGS;+---------+------+-------------------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------------------+ | Warning | 4560 | Attribute thread_priority is ignored (using default value). | +---------+------+-------------------------------------------------------------+ -
В Linux приоритеты потоков групп ресурсов игнорируются, если не задана возможность
CAP_SYS_NICE. Назначение возможностиCAP_SYS_NICEпроцессу предоставляет широкий спектр привилегий; полный список можно найти на http://man7.org/linux/man-pages/man7/capabilities.7.html. Будьте внимательны при активации этой возможности.На платформах Linux, использующих systemd и поддержку ядром Ambient Capabilities (Linux 4.3 или новее), рекомендуемый способ активации возможности
CAP_SYS_NICE— изменить файл службы MySQL и оставить двоичный файл mysqld без изменений. Для изменения файла службы MySQL выполните следующую процедуру:-
Выполните соответствующую команду для вашей платформы:
-
Системы Oracle Linux, Red Hat и Fedora:
$>
sudo systemctl edit mysqld -
Системы SUSE, Ubuntu и Debian:
$>
sudo systemctl edit mysql
-
-
С помощью редактора добавьте следующий текст в файл службы:
[Service] AmbientCapabilities=CAP_SYS_NICE
Перезапустите службу MySQL.
Если вы не можете активировать возможность
CAP_SYS_NICEописанным способом, ее можно установить вручную с помощью команды setcap, указав имя файла исполняемого файла mysqld (требуется доступ sudo). Вы можете проверить возможности, используя getcap. Например:$>
sudo setcap cap_sys_nice+ep$>/path/to/mysqldgetcap/path/to/mysqld/path/to/mysqld= cap_sys_nice+epВ качестве меры предосторожности ограничьте выполнение двоичного файла mysqld пользователю
rootи пользователям с членством в группеmysql:$>
sudo chown root:mysql$>/path/to/mysqldsudo chmod 0750/path/to/mysqldВажноЕсли требуется ручное использование setcap, его необходимо выполнять после каждой переустановки.
-
-
В Windows потоки выполняются на одном из пяти уровней приоритета потоков. Диапазон приоритетов потоков группы ресурсов от -20 до 19 сопоставляется с этими уровнями, как показано в следующей таблице.
Таблица 7.6 Приоритет потоков группы ресурсов в Windows
Таблица 7.6 Приоритет потоков группы ресурсов в Windows Диапазон приоритетов Уровень приоритета Windows -20 до -10 THREAD_PRIORITY_HIGHEST-9 до -1 THREAD_PRIORITY_ABOVE_NORMAL0 THREAD_PRIORITY_NORMAL1 до 10 THREAD_PRIORITY_BELOW_NORMAL11 до 19 THREAD_PRIORITY_LOWEST
© 2025 Oracle
Licensed under the GPLv2 License.