psql_resources_consumption_limits. Контроль потребления ресурсов#

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Контроль потребления ресурсов БД (оперативная память и CPU) – функциональность, которая реализована в виде расширения psql_resources_consumption_limits, позволяет ограничивать потребление оперативной памяти и процессорного времени процессами СУБД.

Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.

Внимание

Процессы расширений ограничены в соответствии с установленными лимитами (включая задания pg_cron и так далее).

В СУБД Pangolin поддерживается:

  • функциональность фиксированного задания ограничений ресурсов для процессов сессий СУБД;

  • завершение с ошибкой сессии, превысившей ограничение на потребление ресурса, и всех ее подпроцессов;

  • обнаружение превышения квоты на ресурсы асинхронно.

Примечание

Управление ограничениями на уровне отдельной сессии не поддерживается.

Подробнее с функциональностью «Контроль потребления ресурсов БД» можно ознакомиться в подразделе «Контроль потребления СУБД вычислительных ресурсов» раздела «Диагностика и планирование» документа «Администрирование функциональностей».

Объекты#

Параметры конфигурирования расширения#

В рамках реализации функциональности были добавлены параметры:

Параметр

Значение по умолчанию

Описание

psql_resources_consumption_limits.mem_limit

0

Ограничение на суммарное потребление оперативной памяти одной сессией.

Задается в килобайтах kB (kilobytes), мегабайтах MB (megabytes), гигабайтах GB (gigabytes), терабайтах TB (terabytes), без указания единиц — килобайты.

Допускаются только положительные целочисленные значения. При указании отрицательного значения или лимита, превышающего физическую память КТС (параметр MemTotal в файле /proc/meminfo), СУБД Pangolin не запускается с выводом ошибки о недопустимом значении или превышении лимита. Если задано нулевое значение, то контроль за потреблением оперативной памяти отключен. По умолчанию лимит равен нулю (контроль отключен)

psql_resources_consumption_limits.cpu_limit

0

Ограничение на процент потребления ядер CPU всеми процессами одной сессии, задается в процентах.

Допускаются положительные целочисленные значения. При указании отрицательного значения или лимита превышающего количество ядер CPU КТС, умноженных на 100, СУБД Pangolin не запускается с выводом ошибки о невалидном значении или превышении лимита. Если задано нулевое значение, то контроль за потреблением CPU отключен. По умолчанию лимит равен нулю (контроль отключен).

Допускаются значения больше 100, например, 350, что означает – «потребление CPU всеми процессами сессии не может превысить 3.5 ядер».

psql_resources_consumption_limits.mem_exceeding_reaction

terminate

Реакция на превышение лимита потребления оперативной памяти:

  • terminate - прерывание всех процессов сессии с выводом сообщения в лог;

  • alert - вывод сообщения в лог о превышении лимита

psql_resources_consumption_limits.cpu_exceeding_reaction

terminate

Реакция на превышение лимита потребления CPU:

  • terminate - прерывание всех процессов сессии с выводом сообщения в лог;

  • alert - вывод сообщения в лог о превышении лимита

psql_resources_consumption_limits.alert_log_level

warning

Уровень лога для реакций alert на превышения лимитов. Принимает значения:

  • debug5

  • debug4

  • debug3

  • debug2

  • debug1

  • debug

  • info

  • notice

  • log

  • warning

psql_resources_consumption_limits.alert_timeout

1 second

Время ожидания для повторного вывода сообщения в лог (задается в единицах времени).

Отрицательные значения не допускаются, максимальное значение - 1 час. Если процесс продолжает выполняться после превышения лимита (реакция на превышение лимита – вывод сообщения в лог), то следующее сообщение о его превышении появится не раньше, чем через установленный тайм-аут. Если установлено нулевое значение, то сообщения выводятся на каждое превышение лимита. Значение по умолчанию - 1 секунда.

При указании отрицательного значения или значения, превышающего 1 час, выводится предупреждение о невалидном параметре и используется значение по умолчанию.

psql_resources_consumption_limits.check_interval

30 seconds

Интервал контроля превышения.

Задается во временных единицах. Отрицательные значения не допускаются, максимальное значение – 5 минут. Значение по умолчанию – 30 с.

Если задано нулевое значение, то контроль за потреблением оперативной памяти и CPU отключен. Если задано значение, отличное от нуля, и включен контроль хотя бы за одним из ресурсов, то процесс будет периодически запускаться с заданным интервалом времени и проверять превышение лимитов.

Примечание

При установке psql_resources_consumption_limits.mem_exceeding_reaction, psql_resources_consumption_limits.cpu_exceeding_reaction и psql_resources_consumption_limits.alert_log_level в значения, отличные от допустимых, выводится предупреждение о невалидности параметра, и используется значение по умолчанию.

Параметры можно изменять без перезапуска сервера.

Представления#

Данные о потреблении ресурсов процессами отображаются в новом представлении psql_resources_consumption_limits.consumption. Права доступа pg_read_all_stats.

Представление содержит поля:

Имя столбца

Тип

Описание

session_id

integer

Идентификатор сессии

proc_id

integer

Идентификатор процесса

role_id

integer

Идентификатор роли

rolname

name

Имя роли

log_level

character varying

Уровень лога для сообщений о превышении лимитов

mem_current

integer

Текущее потребление памяти процессом

mem_current_session

integer

Текущее потребление памяти сессией

mem_max

integer

Максимальное потребление памяти процессом за все время контроля

mem_max_session

integer

Максимальное потребление памяти сессией за все время контроля

mem_limit

integer

Заданное для сессии ограничение по памяти

mem_reaction

character varying

Заданная для сессии реакция на превышение ограничения по памяти

cpu_current

integer

Текущее потребление CPU процессом

cpu_current_session

integer

Текущее потребление CPU сессией

cpu_max

integer

Максимальное потребление CPU процессом за все время контроля

cpu_max_session

integer

Максимальное потребление CPU сессией за все время контроля

cpu_limit

integer

Заданное для сессии ограничение по CPU

cpu_reaction

character varying

Заданная для сессии реакция на превышение ограничения по CPU

Доработка#

Доработка не проводилась.

Ограничения#

Ограничения отсутствуют.

Установка#

Для установки расширения и включения функциональности контроля потребления ресурсов выполните шаги:

  1. Добавьте имя библиотеки расширения в параметр shared_preload_libraries конфигурационного файла postgresql.conf/postgres.yml:

    shared_preload_libraries = 'psql_resources_consumption_limits'
    
  2. Перечитайте конфигурацию и перезагрузите СУБД, в случае кластерной конфигурации:

    • конфигурация cluster:

      pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
      
      pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
      
    • standalone конфигурация:

      pg_ctl restart
      
  3. Выполните команду по добавлению расширения (для создания представления мониторинга):

    CREATE EXTENSION psql_resources_consumption_limits;
    

Примечание

Необходимо учесть увеличение background worker на единицу, и увеличить лимит background worker.

Отключение функциональности#

Для отключения функциональности:

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

    DROP EXTENSION psql_resources_consumption_limits;
    
  2. Удалите имя библиотеки расширения из параметра shared_preload_libraries конфигурационного файла postgresql.conf/postgres.yml:

    shared_preload_libraries = 'psql_resources_consumption_limits'
    
  3. Перезагрузите кластер:

    restart --force && reload --force
    

Примечание

Если требуется временное отключение функциональности для всех ролей, без удаления расширения, то это возможно сделать, установив параметр psql_resources_consumption_limits.check_interval в нулевое значение.

Настройка#

Установка параметров для роли#

Параметры (кроме интервала контроля psql_resources_consumption_limits.check_interval) могут быть заданы суперпользователем отдельно для каждой роли через ALTER ROLE ... SET name=value;. В этом случае реакция на их превышение и лимиты сессий в рамках данной роли будут проверяться с учетом этих параметров.

Как и при определении соответствующих параметров в конфигурации сервера, ограничение будет применяться к каждой из сессий по отдельности. В каждой из сессий значение параметра для роли переопределяет общее значение. Контроль суммарного потребления ресурсов всеми пользовательскими сессиями не выполняется.

Использование расширения#

С примерами использования расширения можно ознакомиться в подразделе «Сценарии использования» раздела «Контроль потребления СУБД вычислительных ресурсов» документа «Администрирование функциональностей».