CREATE RESOURCE QUEUE

Определяет новую очередь ресурсов.

Синтаксис

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

  • Очередь ресурсов с пороговым значением ACTIVE_STATEMENTS ограничивает количество запросов, которые может выполнять роль, назначенная этой очереди. Контролирует число активных запросов, которые могут выполняться одновременно. Значение ACTIVE_STATEMENTS должно быть целым числом больше 0.

MEMORY_LIMIT 'memory_units'

  • Устанавливает общий объём памяти для всех операторов, отправленных пользователями в этой очереди ресурсов. Единицы измерения могут быть указаны в kB, MB или GB. Минимальный объём памяти для очереди ресурсов — 10 МБ. Максимальное значение не ограничено, однако фактический верхний предел определяется объёмом физической памяти хоста сегмента. Значение по умолчанию — без ограничений (-1).

MAX_COST float

  • Очередь ресурсов с пороговым значением MAX_COST устанавливает максимальный предел стоимости запросов, которые может выполнять роль, назначенная этой очереди. Стоимость измеряется как оценочная общая стоимость запроса, определяемая оптимизатором запросов базы данных YMatrix (как показано в выводе команды EXPLAIN). Поэтому администраторам необходимо знать типичные запросы, выполняемые в системе, чтобы правильно задавать пороговые значения стоимости для очередей. Стоимость измеряется в единицах чтения дисковых страниц; значение 1.0 соответствует чтению одной непрерывной дисковой страницы. Значение MAX_COST указывается как число с плавающей точкой (например, 100.0) или в экспоненциальной форме (например, 1e+2).

COST_OVERCOMMIT boolean

  • Если очередь ресурсов ограничена по MAX_COST, администратор может разрешить COST_OVERCOMMIT (значение по умолчанию). Это означает, что запросы, превышающие допустимый порог стоимости, будут разрешены к выполнению, но только при простое системы. Если указано COST_OVERCOMMIT=FALSE, то запросы, превышающие лимит стоимости, всегда будут отклоняться и никогда не будут запускаться.

MIN_COST float

  • Порог минимальной стоимости запроса для малых запросов. Запросы со стоимостью ниже этого порога не ставятся в очередь и выполняются немедленно. Стоимость измеряется как оценочная общая стоимость запроса, определяемая оптимизатором запросов базы данных YMatrix (как показано в выводе команды EXPLAIN). Поэтому администраторам необходимо знать типичные запросы, выполняемые в системе, чтобы правильно задавать стоимость для малых запросов. Стоимость измеряется в единицах чтения дисковых страниц; значение 1.0 соответствует чтению одной непрерывной дисковой страницы. Значение MIN_COST указывается как число с плавающей точкой (например, 100.0) или в экспоненциальной форме (например, 1e+2).

PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX}

  • Устанавливает приоритет запросов, связанных с очередью ресурсов. При возникновении конкуренции за ресурсы запросы или операторы в очередях с более высоким приоритетом получают большую долю доступных ресурсов ЦП. Запросы в очередях с низким приоритетом могут быть задержаны при выполнении запросов с более высоким приоритетом. Если приоритет не указан, приоритет запросов, связанных с очередью, по умолчанию — MEDIUM.

Примечание

Для просмотра настроек ограничений и текущего состояния очереди ресурсов используйте системное представление 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 не предусмотрены очереди ресурсов или управление ресурсами.

См. также

ALTER RESOURCE QUEUE , DROP RESOURCE QUEUE