Управление ресурсами
В 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.