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

В QHB доступно управление разделяемыми ресурсами серверных процессов на основе возможностей ядра Linux (cgroups).

Данная возможность контролируется параметром конфигурации resource_management.

Включение:

ALTER SYSTEM SET resource_management TO ON;

Выключение:

ALTER SYSTEM SET resource_management TO OFF;

Управление осуществляется специальным дочерним процессом СУБД, который реализован в виде исполняемого файла group-agent.



Группы управления ресурсами

Для управления ресурсами введено понятие «группа». Для каждой группы управления ресурсами устанавливается ограничение на доступ к системным ресурсам (CPU), и далее отдельным пользователям СУБД назначаются их группы для настройки приоритета использования ресурсов CPU.

Создание группы управления ресурсами:

qhb_resource_group_create ( имя_группы text )

Ограничение утилизации ресурсов CPU для созданной группы:

qhb_resource_group_set_cpu_share ( имя_группыtext, доля_cpu int4 )

Назначение пользователю СУБД группы управления ресурсами:

qhb_resource_group_user_set_group ( имя_пользователяtext, имя_группы text )

Где:

  • имя_группы — имя группы управления ресурсами;
  • доля_cpu — вес группы в распределении доступных ресурсов CPU: целочисленное значение от 2 (~1%) до 1024 (~100%);
  • имя_пользователя — существующее в СУБД имя пользователя.

Пример:

SELECT qhb_resource_group_create('abcd');

SELECT qhb_resource_group_set_cpu_share('abcd', 300);

SELECT qhb_resource_group_user_set_group('qhb', 'abcd');

После исполнения данных команд от имени суперпользователя либо администратора СУБД при последующих подключениях пользователя qhb вступят в силу ограничения утилизации CPU его серверными процессами.

Ограничения распространяются индивидуально на каждый серверный процесс.



Снятие ограничений

Снятие ограничений для использования CPU для всех пользователей группы:

qhb_resource_group_unset_cpu_share ( имя_группы text )

Отмена назначения группы управления ресурсами для пользователя:

qhb_resource_group_user_unset_group ( имя_пользователя text )

Снятие ограничений вступает в силу с момента последующего подключения пользователя к QHB.



Квотирование доступа к хранилищу (диску)

Распределение нагрузки на CPU — не единственный способ ограничить потребление ресурсов серверными процессами пользователя QHB. Также поддерживается ограничение скорости доступа к долговременному хранилищу (диску).

Для этого требуется знать номера устройств, которые назначило ядро Linux вашему диску или разделу. Это можно сделать с помощью команды lsblk в командной строке.

Ограничение скорости доступа к диску:

qhb_resource_group_set_blkio ( имя_группыtext,старш_номер_устрint4,младш_номер_устрint4,скорость_чтения_bpsint4,скорость_записи_bps int4 )

Снятие ограничений доступа к диску в группе:

qhb_resource_group_unset_blkio ( имя_группы text )

Где:

  • имя_группы — имя группы управления ресурсами;
  • старш_номер_устр — старший номер устройства вашего диска или раздела;
  • младш_номер_устр — младший номер устройства вашего диска или раздела;
  • скорость_чтения_bps — желаемая максимальная скорость доступа к диску на чтение в единицах bps (bytes per second, байт в секунду);
  • скорость_записи_bps — желаемая максимальная скорость доступа к диску на запись в единицах bps.

Пример:

Выполним в командной строке:

$ lsblk
NAME        MAJ:MIN
sda         254:0  
nvme0n1     259:0
|_nvme0n1p1 259:1

Теперь, зная старший/младший номера устройства, можно установить ограничение в 1 килобайт в секунду на чтение и 300 байт в секунду на запись:

SELECT qhb_resource_group_set_blkio('abcd', 259, 1, 1024, 300); -- установка ограничений устройству 259:1

SELECT qhb_resource_group_unset_blkio('abcd'); -- снятие ограничений

Отдельно связывать пользователя с ограничениями не нужно. При назначенной группе управления ресурсами ограничения вступят в силу при следующем подключении пользователя к QHB.



Просмотр существующих ограничений

Для просмотра ограничений, выставленных в данный момент, существуют разделяемые каталоги qhb_resource_group и qhb_resource_group_users.

Пример:


SELECT * FROM qhb_resource_group; -- просмотр групп управления ресурсами

SELECT * FROM qhb_resource_group_users; -- просмотр групп, назначенных конкретным пользователям

Примечание
Назначение групп управления ресурсами иерархическим ролям и ролям ИБ в СУБД не реализовано. Группа назначается отдельному пользователю с правами LOGIN.