Todos os produtos
Search
Central de documentação

Hologres:Automatic throttling for query queue (beta)

Última atualização: Jun 28, 2026

A limitação automática ajusta dinamicamente o número máximo de consultas simultâneas em uma fila com base na carga de trabalho do grupo de computação. Quando a carga é alta, o sistema reduz o limite de simultaneidade para manter a utilização da CPU em um nível elevado, porém seguro, e evitar a exaustão de recursos durante picos de tráfego. À medida que a carga diminui, o limite aumenta para permitir mais consultas.

Compatível com Hologres V3.1 e versões posteriores em instâncias de grupo de computação.

Casos de uso

Use a limitação automática nas seguintes situações:

  • Consultas de alta simultaneidade e tamanho similar: Quando muitas consultas são executadas simultaneamente e cada solicitação consome recursos comparáveis, a limitação automática mantém a utilização da CPU estável abaixo de 100%.

    Se a simultaneidade de linha de base já for baixa, os ajustes dinâmicos podem fazer com que o uso da CPU oscile em um padrão de dente de serra, reduzindo a eficiência. Em casos extremos — como uma única consulta grande monopolizando o grupo de computação — a limitação automática não surte efeito.
  • Tempo de espera na fila aceitável: As consultas que excedem o limite de simultaneidade ficam retidas na fila. Ative este recurso apenas se um aumento no tempo de resposta for tolerável.

  • Picos de tráfego imprevisíveis: Caso não seja possível antecipar aumentos repentinos no volume de consultas ou provisionar previamente recursos adicionais de computação, a limitação automática reduz os riscos à estabilidade sem necessidade de intervenção manual.

Quando não usar

Situação

Compromisso

Melhor alternativa

O pico de tráfego segue um cronograma previsível

A limitação reage após os picos de carga; o agendamento os previne

Use a elasticidade baseada em tempo para grupos de computação

Consultas grandes de baixa simultaneidade predominam

A limitação não tem efeito sobre consultas grandes individuais

Encaminhe essas consultas para o Serverless Computing

Tolerância zero a latência

A limitação retém o excesso de consultas em uma fila, aumentando o tempo de resposta

Faça o scale out do grupo de computação ou use o Large Query Control para descarregar consultas lentas no Serverless Computing

Pré-requisitos

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

Observações de uso

  • A limitação automática aplica-se apenas a consultas roteadas por uma fila de consulta. Tipos de mecanismo afetados: HQE, PQE, SQE e HiveQE. Tipos de consulta afetados: SELECT, INSERT, UPDATE, DELETE e instruções INSERT geradas por COPY e CTAS.

  • Consultas que usam um plano fixo ignoram a fila de consulta e não estão sujeitas aos limites de simultaneidade da limitação automática. Consulte Acelerar a execução de SQL com plano fixo. Para isolar consultas de plano fixo de outras cargas de trabalho, atribua-as a um grupo de computação dedicado. Consulte Guia de início rápido para instâncias de grupo de computação.

Configure a limitação automática

Configure a limitação automática primeiro no nível do grupo de computação e, opcionalmente, substitua-a no nível da fila de consulta.

Ative ou desative no nível do grupo de computação

Importante
  • Quando ativada, todas as filas de consulta no grupo de computação usam a limitação automática por padrão. Desative-a para filas específicas conforme necessário.

  • Quando desativada (padrão), o sistema ignora todas as configurações de limitação automática no nível da fila.

-- Enable automatic throttling at the compute group level
CALL hg_set_warehouse_adaptive_concurrency_limiting ('<warehouse_name>', true);

-- Disable automatic throttling at the compute group level
CALL hg_set_warehouse_adaptive_concurrency_limiting ('<warehouse_name>', false);

Ative ou desative no nível da fila de consulta

-- Enable automatic throttling for a query queue (enabled by default when compute group level is on)
CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'enable_adaptive_concurrency_limiting', 'true');

-- Disable automatic throttling for a query queue (exempts this queue from throttling)
CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'enable_adaptive_concurrency_limiting', 'false');

Defina um limite mínimo de simultaneidade

Por padrão, a limitação automática pode reduzir a simultaneidade até 1. Defina adaptive_concurrency_limiting_min_concurrency para impedir que o sistema reduza a simultaneidade abaixo de um valor especificado. Isso é útil quando é necessário garantir um throughput de linha de base para filas críticas.

-- Set the minimum concurrency floor (default: 1, minimum: 1)
CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'adaptive_concurrency_limiting_min_concurrency', '<min_concurrency>');

Parâmetros

Parâmetro

Descrição

Padrão

Intervalo válido

warehouse_name

Nome do grupo de computação. Consulte Guia de início rápido para instâncias de grupo de computação

query_queue_name

Nome da fila de consulta. Consulte Fila de consulta

min_concurrency

Limite inferior de simultaneidade. Este é um piso, não um teto. A limitação automática nunca reduz a simultaneidade abaixo deste valor, mesmo sob carga alta sustentada. Aumente este valor para proteger filas críticas contra limitação excessiva.

1

1 a max_concurrency (definido ao criar a fila)

Monitorar a limitação automática

No Hologres Management Console, clique em ID da sua instância e acesse a página Monitoring Information. Visualize a métrica Compute Group CPU Utilization (%) para observar como a limitação automática ajusta a simultaneidade em resposta às mudanças de carga.

Exemplo

Este exemplo utiliza o pgbench, ferramenta nativa de benchmark do PostgreSQL, para demonstrar o efeito de ativar e desativar a limitação automática durante um teste de carga sustentada.

  1. Crie tabelas de teste e carregue dados:

    CREATE TABLE tbl_1 (col1 INT, col2 INT, col3 TEXT);
    CREATE TABLE tbl_2 (col1 INT, col2 INT, col3 TEXT);
    INSERT INTO tbl_1 SELECT i, i+1, md5(RANDOM()::TEXT) FROM GENERATE_SERIES (0, 500000) AS i;
    INSERT INTO tbl_2 SELECT i, i+1, md5(RANDOM()::TEXT) FROM GENERATE_SERIES (0, 500000) AS i;
  2. Defina a simultaneidade máxima da fila de consulta como 100. Este exemplo usa o grupo de computação init_warehouse e a fila de consulta default_queue:

    CALL hg_set_query_queue_property ('init_warehouse', 'default_queue', 'max_concurrency', '100');
  3. No diretório bin do cliente pgbench, crie um arquivo SQL de benchmark chamado select.sql com a seguinte instrução:

    EXPLAIN ANALYZE SELECT * FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.col3 = tbl_2.col3 ORDER BY 1;
  4. Defina sua senha como variável de ambiente no arquivo de configuração do servidor:

    export PGPASSWORD='<AccessKey_Secret>'
  5. No diretório bin do cliente pgbench, execute o benchmark:

    ./pgbench \
      -c 30 \
      -j 30 \
      -f select.sql \
      -d <Database> \
      -U <AccessKey_ID> \
      -h <Endpoint> \
      -p <Port> \
      -T 1800

    Para obter detalhes sobre os parâmetros de conexão, consulte Conectar ao Hologres e desenvolver.

  6. Enquanto o benchmark estiver em execução, alterne a limitação automática e observe a utilização da CPU no Hologres Management Console:

    -- Enable automatic throttling
    CALL hg_set_warehouse_adaptive_concurrency_limiting ('init_warehouse', true);
    
    -- Disable automatic throttling
    CALL hg_set_warehouse_adaptive_concurrency_limiting ('init_warehouse', false);

Resultados:

Fase

Estado da limitação

Comprimento da fila

Utilização da CPU

Estabilidade

Inicial

Desativada

0

~100%

Em risco

Intermediária

Ativada

~17

~80%

Estável

Final

Desativada novamente

0

~100%

Em risco

Com a limitação automática ativada, o sistema forma uma fila curta (~17 consultas pendentes) e estabiliza a CPU em ~80%, reduzindo significativamente o risco de exaustão de recursos em comparação à execução a 100% sem limitação.

Próximos passos