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 Statement».ALTER RESOURCE GROUPизменяет существующую группу. См. Раздел 15.7.2.1, «ALTER RESOURCE GROUP Statement».DROP RESOURCE GROUPудаляет существующую группу. См. Раздел 15.7.2.3, «DROP RESOURCE GROUP Statement».
Эти запросы требуют привилегии RESOURCE_GROUP_ADMIN.
Для управления назначениями групп ресурсов используйте следующие возможности:
SET RESOURCE GROUPназначает потоки группе. См. Раздел 15.7.2.4, «SET RESOURCE GROUP Statement».Указание оптимизатора
RESOURCE_GROUPназначает отдельные запросы группе. См. Раздел 10.9.3, «Optimizer Hints».
Эти операции требуют привилегии RESOURCE_GROUP_ADMIN или RESOURCE_GROUP_USER.
Определения групп ресурсов хранятся в таблице словаря данных resource_groups, чтобы группы сохранялись после перезапуска сервера. Поскольку resource_groups является частью словаря данных, к ней у пользователей нет прямого доступа. Информация о группах ресурсов доступна с помощью таблицы RESOURCE_GROUPS схемы информации, которая реализуется как представление на таблице словаря данных. См. Раздел 28.3.26, «Таблица 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.