Определяет новую очередь ресурсов.
CREATE RESOURCE QUEUE name WITH (queue_attribute=value [, ... ])
где queue_attribute:
ACTIVE_STATEMENTS=integer
[ MAX_COST=float [COST_OVERCOMMIT={TRUE|FALSE}] ]
[ MIN_COST=float ]
[ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]
[ MEMORY_LIMIT='memory_units' ]
| MAX_COST=float [ COST_OVERCOMMIT={TRUE|FALSE} ]
[ ACTIVE_STATEMENTS=integer ]
[ MIN_COST=float ]
[ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]
[ MEMORY_LIMIT='memory_units' ]
Создаёт новую очередь ресурсов для управления ресурсами базы данных YMatrix. Очередь ресурсов должна иметь значение ACTIVE_STATEMENTS или MAX_COST (или оба значения). Создавать очереди ресурсов могут только суперпользователи.
Очередь ресурсов с пороговым значением ACTIVE_STATEMENTS устанавливает максимальное количество запросов, которые может выполнять роль, назначенная этой очереди. Она контролирует число активных запросов, которые могут выполняться одновременно. Значение параметра ACTIVE_STATEMENTS должно быть целым числом больше 0.
Очередь ресурсов с пороговым значением MAX_COST устанавливает максимальный предел стоимости запросов, которые может выполнять роль, назначенная этой очереди. Стоимость измеряется как оценочная общая стоимость запроса, определяемая оптимизатором запросов базы данных YMatrix (как показано в выводе команды EXPLAIN). Поэтому администраторам необходимо знать типичные запросы, выполняемые в системе, чтобы правильно задавать пороговые значения стоимости для очередей. Стоимость измеряется в единицах чтения дисковых страниц; значение 1.0 соответствует чтению одной непрерывной дисковой страницы. Значение MAX_COST указывается как число с плавающей точкой (например, 100.0) или в экспоненциальной форме (например, 1e+2). Если ограничение очереди ресурсов основано на пороге стоимости, администратор может установить COST_OVERCOMMIT=TRUE (значение по умолчанию). Это означает, что запросы, превышающие допустимый порог стоимости, будут разрешены к выполнению, но только при простое системы. Если указано COST_OVERCOMMIT=FALSE, то запросы, превышающие лимит стоимости, всегда будут отклоняться и никогда не будут запускаться. Указав значение MIN_COST, администратор может определить стоимость малых запросов, которые будут освобождены от очереди ресурсов.
Если значение для ACTIVE_STATEMENTS или MAX_COST не задано, оно по умолчанию устанавливается в -1 (что означает отсутствие ограничений). После создания очереди ресурсов необходимо назначить роли этой очереди с помощью команд ALTER ROLE или CREATE ROLE.
Можно назначить PRIORITY очереди ресурсов, чтобы контролировать относительную долю доступных ресурсов ЦП, используемых запросами, связанными с этой очередью, по сравнению с другими очередями ресурсов. Если значение PRIORITY не задано, приоритет запросов, связанных с очередью, по умолчанию — MEDIUM.
Очередь ресурсов с необязательным порогом MEMORY_LIMIT устанавливает ограничение на максимальный объём памяти, который может использоваться на хосте сегмента для всех запросов, отправленных через эту очередь ресурсов. Это определяет общий объём памяти, который все рабочие процессы запроса могут потреблять на хосте сегмента во время выполнения запроса. YMatrix рекомендует использовать MEMORY_LIMIT вместе с ACTIVE_STATEMENTS, а не с MAX_COST. Для очереди, основанной на количестве запросов, объём памяти по умолчанию, выделяемый каждому запросу: MEMORY_LIMIT / ACTIVE_STATEMENTS. Для очереди, основанной на стоимости, объём памяти по умолчанию, выделяемый каждому запросу: MEMORY_LIMIT * (стоимость_запроса / MAX_COST).
Если MEMORY_LIMIT или statement_mem не превышены, объём памяти по умолчанию можно переопределить для отдельного запроса с помощью параметра конфигурации сервера statement_mem. Например, выделить больше памяти для конкретного запроса:
=> SET statement_mem='2GB';
=> SELECT * FROM my_big_table WHERE column='value' ORDER BY id;
=> RESET statement_mem;
Значение MEMORY_LIMIT для всех ваших очередей ресурсов не должно превышать физический объём памяти хоста сегмента. Если рабочая нагрузка распределена между несколькими очередями, распределение памяти может превысить доступный объём. Однако если будет превышен лимит памяти сегмента, указанный в gp_vmem_protect_limit, запрос может быть отменён во время выполнения.
name
ACTIVE_STATEMENTS integer
MEMORY_LIMIT 'memory_units'
MAX_COST float
COST_OVERCOMMIT boolean
MIN_COST float
PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX}
Для просмотра настроек ограничений и текущего состояния очереди ресурсов используйте системное представление gp_toolkit.gp_resqueue_status:
SELECT * from gp_toolkit.gp_resqueue_status WHERE
rsqname='queue_name';
Существует ещё одно системное представление — pg_stat_resqueues, которое отображает статистические метрики для очередей ресурсов за определённый период времени. Однако для использования этого представления необходимо включить параметр конфигурации сервера stats_queue_level.
Команда CREATE RESOURCE QUEUE не может выполняться внутри транзакции.
Кроме того, SQL-операторы, выполняемые в процессе работы команды EXPLAIN ANALYZE, исключаются из очереди ресурсов.
Создание очереди ресурсов с лимитом активных запросов в 20:
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=20);
Создание очереди ресурсов с лимитом активных запросов в 20 и общим лимитом памяти в 2000 МБ (каждый запрос будет выделять 100 МБ памяти хоста сегмента при выполнении):
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=20,
MEMORY_LIMIT='2000MB');
Создание очереди ресурсов с лимитом стоимости запросов в 3000.0:
CREATE RESOURCE QUEUE myqueue WITH (MAX_COST=3000.0);
Создание очереди ресурсов с лимитом стоимости запросов в 3^10 (или 3000000000.0), без разрешения превышения лимита. Разрешить малым запросам со стоимостью менее 500 выполняться немедленно:
CREATE RESOURCE QUEUE myqueue WITH (MAX_COST=3e+10,
COST_OVERCOMMIT=FALSE, MIN_COST=500.0);
Создание очереди ресурсов с ограничениями и по количеству активных запросов, и по стоимости запросов:
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=30,
MAX_COST=5000.00);
Создание очереди ресурсов с лимитом активных запросов в 5 и максимальным приоритетом:
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=5,
PRIORITY=MAX);
CREATE RESOURCE QUEUE является расширением базы данных YMatrix. В стандарте SQL не предусмотрены очереди ресурсов или управление ресурсами.