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:
Uma fila de consulta. Consulte Fila de consulta.
-
Uma instância de grupo de computação executando Hologres V3.1 ou posterior. Instâncias de uso geral não suportam este recurso.
Para usar este recurso em uma instância de uso geral, converta-a primeiro para uma instância de grupo de computação. Consulte Converter uma instância de uso geral em uma instância de grupo de computação .
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,SQEeHiveQE. 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
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 |
|
|
Nome do grupo de computação. Consulte Guia de início rápido para instâncias de grupo de computação |
— |
— |
|
|
Nome da fila de consulta. Consulte Fila de consulta |
— |
— |
|
|
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 |
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.
-
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; -
Defina a simultaneidade máxima da fila de consulta como 100. Este exemplo usa o grupo de computação
init_warehousee a fila de consultadefault_queue:CALL hg_set_query_queue_property ('init_warehouse', 'default_queue', 'max_concurrency', '100'); -
No diretório
bindo cliente pgbench, crie um arquivo SQL de benchmark chamadoselect.sqlcom a seguinte instrução:EXPLAIN ANALYZE SELECT * FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.col3 = tbl_2.col3 ORDER BY 1; -
Defina sua senha como variável de ambiente no arquivo de configuração do servidor:
export PGPASSWORD='<AccessKey_Secret>' -
No diretório
bindo cliente pgbench, execute o benchmark:./pgbench \ -c 30 \ -j 30 \ -f select.sql \ -d <Database> \ -U <AccessKey_ID> \ -h <Endpoint> \ -p <Port> \ -T 1800Para obter detalhes sobre os parâmetros de conexão, consulte Conectar ao Hologres e desenvolver.
-
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.