Cargas de trabalho DML e DQL que competem com consultas de produção podem causar erros de falta de memória (OOM) e degradar a estabilidade da instância. O Serverless Computing direciona essas cargas para um pool de recursos elástico externo à instância, isolando operações pesadas sem afetar o tráfego em tempo real. Compatível com Hologres V2.1.17 e versões posteriores.
Tarefas compatíveis
|
Versão |
Tarefas compatíveis |
|
V2.1.17+ |
Principais tarefas de Data Manipulation Language (DML): INSERT (exceto INSERT OVERWRITE), INSERT ON CONFLICT (UPSERT), DELETE, UPDATE |
|
V2.2.14+ |
Tarefas de Data Query Language (DQL) |
|
V3.0.1+ |
Tarefas COPY em DML |
|
V3.0.9+ |
Tarefas CREATE TABLE AS (CTAS) em DML |
|
V2.2.42, V3.0.19+ |
Tarefas RESHARDING |
|
V3.0.26+ |
INSERT OVERWRITE por meio do procedimento armazenado |
|
V3.1.0+ |
Sintaxe nativa INSERT OVERWRITE em DML; tarefas REBUILD |
|
V3.1.3+ |
Leitura e gravação em tabelas internas criptografadas do Hologres e tabelas externas criptografadas mapeadas para MaxCompute. Ative o parâmetro GUC |
|
V3.1.11+ |
Tarefas de compactação. Consulte Descarregar compactação para recursos serverless |
|
V4.0+ |
Leitura e gravação em tabelas externas do Data Lake Formation (DLF). Consulte Aceleração de data lake OSS usando DLF |
|
V4.1+ |
Suporte a Mascaramento de dados |
Extensões de função compatíveis: ClickHouse, Flow Analysis, PostGIS, RoaringBitmap, BSI e Proxima.
Limitações
O Serverless Computing não oferece suporte a:
Consultas em instâncias secundárias somente leitura. Instâncias primárias e instâncias de virtual warehouse não são afetadas.
Consultas com transações DML de múltiplas linhas ativadas (
set hg_experimental_enable_transaction = on).Instruções SQL que utilizam Fixed Plan.
Consultas e gravações entre bancos de dados.
Direcionar SQL para recursos serverless
O Hologres avalia as regras de roteamento na seguinte ordem de prioridade. A primeira regra correspondente é aplicada:
|
Prioridade |
Método |
Mais indicado para |
|
1 (mais alta) |
Tarefas únicas ou ad hoc na conexão atual |
|
|
2 |
Usuários ou funções específicos que devem sempre usar recursos serverless |
|
|
3 |
Lotes de SQL por tipo, mecanismo, fingerprint SQL ou modo de armazenamento |
|
|
4 |
Identificação e roteamento automático de tarefas grandes |
|
|
5 (mais baixa) |
Nenhum — recursos da instância |
Todo o restante do SQL |
Quando uma instrução SQL é executada em recursos serverless, os recursos de computação são alocados exclusivamente para essa instrução. Nenhuma outra SQL é executada simultaneamente nesses recursos.
Direcionar uma solicitação para recursos serverless envolve processamento de metadados na instância, o que consome uma pequena quantidade de recursos de computação da instância. Evite QPS (consultas por segundo) excessivamente alto para solicitações serverless.
Em instâncias de uso geral, o processamento de metadados consome os próprios recursos de computação da instância.
Em instâncias de virtual warehouse, o processamento de metadados consome recursos da virtual warehouse líder, independentemente de você se conectar através da virtual warehouse líder ou seguidora de um Table Group.
Configuração no nível de sessão
Defina hg_computing_resource no nível de sessão para direcionar todo o SQL da conexão atual para recursos serverless. Redefina o parâmetro imediatamente após a conclusão da tarefa para evitar o direcionamento não intencional de consultas subsequentes.
Utilize este método para:
Tarefas pontuais, como backfills de dados históricos ou modificações de esquema/propriedades de tabela (via REBUILD).
Tarefas periódicas de importação em lote (M+1, T+1 ou H+1).
Cenários que exigem controle flexível de roteamento de recursos por sessão.
-- Route the current session to Serverless Computing resources.
-- Default value is local (uses instance resources).
SET hg_computing_resource = 'serverless';
-- Run your DML statement.
INSERT INTO sink_tbl SELECT * FROM source_tbl;
-- Reset after the task. This prevents subsequent SQL from using serverless resources unintentionally.
RESET hg_computing_resource;
Não defina este parâmetro no nível do banco de dados. Sempre execute RESET hg_computing_resource após concluir sua tarefa.
Exemplo completo:
-- Data preparation
CREATE TABLE source_tbl (id int);
CREATE TABLE sink_tbl (id int);
INSERT INTO source_tbl SELECT * FROM generate_series(1, 99999999);
-- Route to serverless and run the task
SET hg_computing_resource = 'serverless';
INSERT INTO sink_tbl SELECT * FROM source_tbl;
RESET hg_computing_resource;
Configuração no nível de usuário
Configure todo o SQL iniciado por um usuário ou função específica para ser executado em recursos serverless por padrão. Este método tem prioridade sobre a configuração GUC no nível do banco de dados, mas cede à configuração no nível de sessão. Para mais detalhes, consulte Parâmetros GUC.
Este método é recomendado para:
Superusuários ou outros usuários com altos privilégios cujas tarefas devem sempre utilizar recursos serverless.
Contas de fonte de dados que alimentam painéis de alta prioridade.
-- Route all SQL from a specific user in a database to serverless resources.
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_computing_resource = 'serverless';
-- Revert the configuration.
ALTER USER "<role_name>" IN DATABASE <db_name> RESET hg_computing_resource;
Configuração no nível de Query Queue
Configure uma Query Queue inteira para direcionar todo o seu SQL para recursos serverless. Isso permite usar classificadores de Query Queue para atingir SQL específico por tipo, mecanismo, fingerprint SQL ou modo de armazenamento. Para mais detalhes, consulte Query Queue.
Exemplos de critérios de direcionamento:
Por tipo de consulta: INSERT, SELECT, UPDATE, DELETE
Por mecanismo de consulta: HQE, PQE, SQE, HiveQE. Por exemplo, direcione todas as tarefas SQE (consultas MaxCompute via FDW) para recursos serverless.
Por fingerprint SQL: Se um padrão de consulta específico representar um risco à estabilidade, configure seu fingerprint SQL para sempre executar em recursos serverless.
Por modo de armazenamento: Direcione todas as consultas de cold storage para recursos serverless.
Instância de uso geral:
-- Route all queries in the target queue to serverless resources.
CALL hg_set_query_queue_property('<query_queue_name>', 'computing_resource', 'serverless');
-- (Optional) Set the query priority for this queue when using serverless resources.
-- Valid values: 1-5. Default: 3.
CALL hg_set_query_queue_property('<query_queue_name>', 'query_priority_when_using_serverless_computing', '<priority>');
Instância de virtual warehouse:
-- Route all queries in the target queue to serverless resources.
CALL hg_set_query_queue_property('<warehouse_name>', '<query_queue_name>', 'computing_resource', 'serverless');
-- (Optional) Set the query priority for this queue when using serverless resources.
-- Valid values: 1-5. Default: 3.
CALL hg_set_query_queue_property('<warehouse_name>', '<query_queue_name>', 'query_priority_when_using_serverless_computing', '<priority>');
Serverless Computing adaptativo
O Hologres identifica automaticamente tarefas grandes e as direciona para recursos serverless, sem necessidade de configuração manual por consulta. Para mais detalhes, consulte Serverless Computing adaptativo.
Nova tentativa automática para tarefas grandes
Defina limiares para "consultas grandes", como consultas que excedem uma duração especificada ou causam erro OOM. O Hologres tenta automaticamente reexecutar essas consultas em recursos serverless. Essa abordagem reduz a carga nos serviços de produção, diminui a frequência de erros OOM e melhora a estabilidade do sistema. Para mais detalhes, consulte Controlar big queries.
Definir prioridade da tarefa
Quando várias instruções SQL estão na fila para recursos serverless, o Hologres aloca recursos por prioridade. Tarefas de maior prioridade recebem recursos primeiro, independentemente da quantidade de recursos solicitada.
|
Parâmetro |
Valores válidos |
Padrão |
Escopo |
|
|
1–5 (5 = mais alta) |
3 |
Nível de sessão ou usuário |
Funcionamento da alocação por prioridade:
|
Condição |
Comportamento |
|
Tarefa de maior prioridade entra na fila |
O sistema aguarda a conclusão das tarefas em execução e aloca recursos para a tarefa de maior prioridade primeiro |
|
Múltiplas tarefas com a mesma prioridade |
Os recursos são alocados seguindo a ordem da fila |
|
Recursos disponíveis insuficientes para a próxima tarefa |
O sistema aguarda até que haja recursos suficientes livres, mesmo que tarefas de menor prioridade pudessem rodar com os recursos atualmente disponíveis |
Exemplo: Sua instância possui 32 vCPUs, com um máximo de 96 vCPUs serverless disponíveis. O SQL A está em execução usando 64 vCPUs. A fila contém o SQL B (48 vCPUs, prioridade 5) e o SQL C (32 vCPUs, prioridade 3). Embora 32 vCPUs estejam disponíveis imediatamente, o sistema aguarda o término do SQL A e aloca 48 vCPUs para o SQL B primeiro, pois o SQL B tem prioridade mais alta.
Nível de sessão:
SET hg_experimental_serverless_computing_query_priority = 5;
-- Run your task.
RESET hg_experimental_serverless_computing_query_priority;
Nível de usuário:
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_experimental_serverless_computing_query_priority = 5;
-- Revert the configuration.
ALTER USER "<role_name>" IN DATABASE <db_name> RESET hg_experimental_serverless_computing_query_priority;
Exemplo combinado — direcionar para serverless e definir prioridade:
SET hg_computing_resource = 'serverless';
SET hg_experimental_serverless_computing_query_priority = 5;
INSERT INTO sink_tbl SELECT * FROM source_tbl;
RESET hg_computing_resource;
RESET hg_experimental_serverless_computing_query_priority;
Verificar o Serverless Computing
Use EXPLAIN para confirmar se uma instrução SQL será direcionada para recursos serverless antes de executá-la.
SET hg_computing_resource = 'serverless';
EXPLAIN INSERT INTO sink_tbl SELECT * FROM source_tbl;
RESET hg_computing_resource;
A saída será semelhante à seguinte. Se Computing Resource: Serverless aparecer, a instrução foi direcionada corretamente.
QUERY PLAN
------------------------------------------------------------------------------------------
Gather (cost=0.00..5.18 rows=100 width=4)
-> Insert (cost=0.00..5.18 rows=100 width=4)
-> Redistribution (cost=0.00..5.10 rows=100 width=4)
-> Local Gather (cost=0.00..5.10 rows=100 width=4)
-> Decode (cost=0.00..5.10 rows=100 width=4)
-> Seq Scan on source_tbl (cost=0.00..5.00 rows=100 width=4)
Computing Resource: Serverless
Optimizer: HQO version 2.1.0
(8 rows)
Para monitorar tarefas serverless em execução e históricas, consulte Monitorar tarefas de Serverless Computing.