Spec-Zone.ru › MySQL 9.2

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 выполните следующую процедуру:

    1. Выполните соответствующую команду для вашей платформы:

      • Системы Oracle Linux, Red Hat и Fedora:

        $> sudo systemctl edit mysqld
        
      • Системы SUSE, Ubuntu и Debian:

        $> sudo systemctl edit mysql
        
    2. С помощью редактора добавьте следующий текст в файл службы:

      [Service]
      AmbientCapabilities=CAP_SYS_NICE
      
    3. Перезапустите службу MySQL.

    Если вы не можете активировать возможность CAP_SYS_NICE описанным способом, ее можно установить вручную с помощью команды setcap, указав имя файла исполняемого файла mysqld (требуется доступ sudo). Вы можете проверить возможности, используя getcap. Например:

    $> sudo setcap cap_sys_nice+ep /path/to/mysqld
    $> getcap /path/to/mysqld
    /path/to/mysqld = cap_sys_nice+ep
    

    В качестве меры предосторожности ограничьте выполнение двоичного файла mysqld пользователю root и пользователям с членством в группе mysql:

    $> sudo chown root:mysql /path/to/mysqld
    $> sudo 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_NORMAL
    0 THREAD_PRIORITY_NORMAL
    1 до 10 THREAD_PRIORITY_BELOW_NORMAL
    11 до 19 THREAD_PRIORITY_LOWEST

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/resource-groups.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API