Spec-Zone.ru › MySQL 8.4

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.

  • Каждая группа может быть включена или выключена, что предоставляет администраторам контроль над назначением потоков. Потоки могут быть назначены только включенным группам.

END_OF_DOCUMENT_MARKER

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

По умолчанию существует одна системная группа и одна группа пользователей, соответственно, названные 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 выполните следующую процедуру:

    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-8.4-en/resource-groups.html

Spec-Zone.ru

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