Todos os produtos
Search
Central de documentação

AnalyticDB:Use resource queues to perform workload management

Última atualização: Jun 27, 2026

As filas de recursos permitem controlar como o AnalyticDB for PostgreSQL aloca CPU e memória entre cargas de trabalho concorrentes. Ao agrupar consultas em filas com limites e prioridades definidos, você evita que a contenção de recursos degrade a latência de tarefas sensíveis quando o sistema está sob carga.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma instância do AnalyticDB for PostgreSQL

  • Uma conta inicial ou uma conta privilegiada com a função RDS_SUPERUSER

Sem as permissões necessárias, as operações de fila falham com o erro ERROR: must be superuser to alter resource queues . Para conceder a função RDS_SUPERUSER a uma função existente, execute: ALTER ROLE role_name WITH RDS_SUPERUSER;

Como funciona

Cada fila de recursos define dois tipos de controle:

  • Controles de admissão: ACTIVE_STATEMENTS e MEMORY_LIMIT determinam se uma consulta entra na fila ou permanece em espera.

  • Controles de execução: PRIORITY determina como a CPU é compartilhada entre as consultas ativas durante a execução. Esse parâmetro não influencia a admissão da consulta na fila.

Ao receber uma consulta, o AnalyticDB for PostgreSQL verifica primeiro os controles de admissão. Se a fila estiver com capacidade máxima, a consulta aguarda. Após a admissão, o compartilhamento de CPU em tempo de execução segue o parâmetro PRIORITY em relação às outras filas ativas.

O parâmetro ACTIVE_STATEMENTS limita o número de consultas executadas simultaneamente em uma fila. Esse limite é independente do número de conexões de banco de dados, gerenciado separadamente.

Crie uma fila de recursos

CREATE RESOURCE QUEUE name WITH (queue_attribute=value [, ...])

Especifique pelo menos um dos parâmetros ACTIVE_STATEMENTS ou MAX_COST. A omissão de ambos retorna:

ERROR:  at least one threshold ("ACTIVE_STATEMENTS", "MAX_COST") must be specified

Não crie filas de recursos dentro de um bloco de transação:

ERROR:  CREATE RESOURCE QUEUE cannot run inside a transaction block

Parâmetros

Parâmetro

Descrição

Padrão

ACTIVE_STATEMENTS

Número máximo de consultas executadas simultaneamente. Consultas adicionais aguardam até que um slot fique disponível.

MEMORY_LIMIT

Memória máxima para todas as consultas ativas combinadas em um único nó de computação. Unidades: KB, MB ou GB.

-1 (ilimitado)

MAX_COST

Custo máximo da consulta estimado pelo otimizador.

-1 (ilimitado)

COST_OVERCOMMIT

Válido apenas com MAX_COST. TRUE: consultas que excedem MAX_COST são executadas quando a carga do sistema é baixa. FALSE: essas consultas são rejeitadas.

MIN_COST

Consultas abaixo deste limiar de custo ignoram a fila e são executadas imediatamente.

PRIORITY

Compartilhamento de CPU em tempo de execução relativo a outras filas. Opções: MIN, LOW, MEDIUM, HIGH, MAX.

MEDIUM

Exemplos

Limite consultas concorrentes:

CREATE RESOURCE QUEUE adhoc WITH (ACTIVE_STATEMENTS=3);

Adicione um limite de memória:

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

Defina alta prioridade:

CREATE RESOURCE QUEUE executive WITH (ACTIVE_STATEMENTS=3, PRIORITY=MAX);

Como funciona a prioridade de CPU

Quando filas com prioridades diferentes têm consultas ativas, o AnalyticDB for PostgreSQL distribui a CPU dinamicamente:

  • Consultas em filas com a mesma prioridade recebem partes iguais de CPU.

  • Se filas de alta, média e baixa prioridade estiverem ativas simultaneamente, a fila de alta prioridade recebe 90% da CPU. Os 10% restantes são divididos de modo que a média receba 90% e a baixa, 10%.

Por exemplo, se consultas de relatórios (MEDIUM) estiverem em execução e uma consulta executiva (MAX) for ativada, o AnalyticDB for PostgreSQL transfere imediatamente mais CPU para a fila executiva e reduz o compartilhamento da fila de relatórios.

Substitua a memória para uma única consulta

Use statement_mem para alocar mais memória a uma consulta específica. O valor deve ser menor que MEMORY_LIMIT e max_statement_mem.

SET statement_mem = '1GB';
SELECT * FROM test_adbpg WHERE col = 'adb4pg' ORDER BY id;
RESET statement_mem;

Quais instruções SQL estão sujeitas a filas de recursos

Por padrão, o parâmetro resource_select_only está definido como off no AnalyticDB for PostgreSQL. Portanto, as seguintes instruções estão sujeitas a filas de recursos:

  • SELECT, SELECT INTO, CREATE TABLE AS SELECT, DECLARE CURSOR

  • INSERT, UPDATE, DELETE

Defina resource_select_only como on para restringir o gerenciamento de filas apenas a instruções da família SELECT.

Atribua usuários a uma fila de recursos

Após criar uma fila, atribua usuários a ela. Cada usuário pertence exatamente a uma fila de recursos.

-- Assign a queue when creating a role
CREATE ROLE analyst WITH LOGIN RESOURCE QUEUE reporting;

-- Reassign an existing role
ALTER ROLE analyst RESOURCE QUEUE executive;
Usuários não atribuídos a nenhuma fila são colocados em pg_default , que permite 500 consultas ativas simultâneas sem limites de custo e com prioridade MEDIUM.

Para remover um usuário de uma fila de recursos e devolvê-lo a pg_default:

ALTER ROLE role_name RESOURCE QUEUE none;

Modifique uma fila de recursos

-- Change the active statement limit
ALTER RESOURCE QUEUE adhoc WITH (ACTIVE_STATEMENTS=5);

-- Change memory and cost limits
ALTER RESOURCE QUEUE adhoc WITH (MAX_COST=-1.0, MEMORY_LIMIT='2GB');

-- Change priority
ALTER RESOURCE QUEUE adhoc WITH (PRIORITY=LOW);
ALTER RESOURCE QUEUE reporting WITH (PRIORITY=HIGH);

Monitore a atividade da fila

Verifique a configuração de uma fila específica:

SELECT * FROM pg_resqueue WHERE rsqname = 'adhoc';

Exclua uma fila de recursos

DROP RESOURCE QUEUE name;
Não exclua uma fila se ela tiver usuários atribuídos ou consultas em estado de espera. Remova todos os usuários da fila e limpe quaisquer consultas pendentes antes de prosseguir.

Solução de problemas

ERROR: must be superuser to alter resource queues

Causa: A conta atual não tem permissões suficientes.

Solução: Use uma conta inicial ou uma conta privilegiada com a função RDS_SUPERUSER. Alternativamente, conceda RDS_SUPERUSER à conta atual:

ALTER ROLE role_name WITH RDS_SUPERUSER;