Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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>' ]

Описание

Создает новую ресурсную очередь (resource queue) для управления ресурсами Greengage DB. Для ресурсной очереди должен быть заполнен либо атрибут ACTIVE_STATEMENTS, либо атрибут MAX_COST (или оба атрибута). Создавать ресурсную очередь может только суперпользователь.

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

Ресурсные очереди с порогом MAX_COST задают максимальный предел суммарной стоимости запросов, которые могут выполняться ролями, назначенными этой очереди. Стоимость измеряется как оценочная суммарная стоимость запроса, определяемая планировщиком запросов (как показано в выводе EXPLAIN для запроса). Поэтому администратор должен быть знаком с запросами, которые обычно выполняются в системе, чтобы установить подходящий порог стоимости для очереди. Стоимость измеряется в единицах чтения дисковых страниц. Значение 1.0 соответствует одному последовательному чтению дисковой страницы. Значение MAX_COST задается числом с плавающей точкой (например 100.0) или может быть задано в экспоненциальной форме (например 1e+2). Если ресурсная очередь ограничена порогом стоимости, администратор может разрешить COST_OVERCOMMIT=TRUE. Это означает, что запрос, превышающий допустимый порог стоимости, будет допущен к выполнению, но только когда система простаивает. Если указано COST_OVERCOMMIT=FALSE, запросы, превышающие лимит стоимости, всегда будут отклоняться и никогда не будут допущены к выполнению. Указание значения MIN_COST позволяет администратору определить стоимость для небольших запросов, которые будут исключены из постановки в очередь.

ПРИМЕЧАНИЕ

GPORCA и планировщик Postgres используют разные модели оценки стоимости запросов и могут вычислять разные стоимости для одного и того же запроса. Схема управления ресурсами ресурсных очередей Greengage DB не различает и не выравнивает стоимости между GPORCA и планировщиком Postgres. Она использует буквальное значение стоимости, возвращаемое оптимизатором, чтобы ограничивать запросы.

Когда активно управление ресурсами на основе ресурсных очередей, используйте ограничения MEMORY_LIMIT и ACTIVE_STATEMENTS для ресурсных очередей вместо настройки ограничений на основе стоимости. Даже при использовании GPORCA Greengage DB может для некоторых запросов переключаться на планировщик Postgres, поэтому использование ограничений на основе стоимости может приводить к неожиданным результатам.

Если значение ACTIVE_STATEMENTS или MAX_COST не задано, по умолчанию оно устанавливается в -1 (то есть ограничение отсутствует). После определения ресурсной очереди необходимо назначить ролям эту очередь с помощью команды ALTER ROLE или CREATE ROLE.

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

Ресурсные очереди с необязательным порогом MEMORY_LIMIT задают максимальный предел объема памяти, который все запросы, отправленные через ресурсную очередь, могут потреблять на сегментном хосте. Это определяет общий объем памяти, который все рабочие процессы запроса могут потреблять на сегментном хосте во время выполнения запроса. Greengage DB рекомендует использовать MEMORY_LIMIT совместно с ACTIVE_STATEMENTS, а не с MAX_COST. Объем памяти по умолчанию, выделяемый на запрос в очередях на основе количества операторов, равен: MEMORY_LIMIT / ACTIVE_STATEMENTS. Объем памяти по умолчанию, выделяемый на запрос в очередях на основе стоимости, равен: MEMORY_LIMIT * (query_cost / MAX_COST).

Значение памяти по умолчанию можно переопределить для отдельного запроса с помощью серверного параметра конфигурации statement_mem при условии, что не превышены MEMORY_LIMIT или max_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. Минимальная квота памяти для ресурсной очереди составляет 10MB. Ограничения максимумального значения нет; однако верхняя граница во время выполнения запроса ограничена физической памятью хоста сегмента. Значение по умолчанию — без ограничений (-1)

MAX_COST <float>

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

COST_OVERCOMMIT <boolean>

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

MIN_COST <float>

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

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

Задает приоритет запросов, связанных с ресурсной очередью. Запросы или операторы в очередях с более высокими уровнями приоритета будут получать большую долю доступных ресурсов CPU в случае конкуренции. Запросы в очередях с низким приоритетом могут задерживаться, пока выполняются запросы с более высоким приоритетом. Если приоритет не указан, запросы, связанные с очередью, имеют приоритет 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 и общим лимитом памяти 2000MB (каждому запросу будет выделено 100MB памяти сегментного хоста во время выполнения):

CREATE RESOURCE QUEUE myqueue WITH (
    ACTIVE_STATEMENTS = 20,
    MEMORY_LIMIT = '2000MB'
    );

Создать ресурсную очередь с лимитом стоимости запроса 3000.0:

CREATE RESOURCE QUEUE myqueue WITH (MAX_COST = 3000.0);

Создать ресурсную очередь с лимитом стоимости запроса 3e+10 (или 30000000000.0) и не разрешать превышение (overcommit). Разрешить небольшим запросам со стоимостью ниже 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 — это расширение Greengage DB. Ресурсные очереди и управление ресурсами не предусмотрены в стандарте SQL.

См. также