As instâncias do Hologres são dimensionadas em incrementos de Compute Unit (CU). Como o Hologres utiliza uma arquitetura de separação entre computação e armazenamento, o storage escala de forma independente. Portanto, escolher uma especificação de instância consiste essencialmente em selecionar a capacidade de computação adequada para sua carga de trabalho.
Esta página explica como a quantidade de CUs se relaciona com conexões, contagem de shards e desempenho de consultas, permitindo que você escolha uma especificação inicial e saiba quando ajustá-la.
Conceitos principais
CU (Compute Unit) — Unidade base de recursos para instâncias do Hologres. Cada 16 CUs correspondem a um nó de computação.
Shard — Unidade de particionamento de dados no Hologres. Cada shard processa solicitações de leitura e escrita para uma parte dos dados. Os shards dentro do mesmo Table Group distribuem os dados de cada tabela para que junções entre tabelas colocalizadas evitem movimentação de dados entre shards (uma junção local). Quando os dados abrangem vários shards, um operador de redistribuição os reorganiza pela rede, gerando sobrecarga de agendamento.
Table Group — Agrupamento lógico que determina a organização dos shards. Todas as tabelas no mesmo Table Group compartilham o mesmo layout de shards, possibilitando junções locais entre essas tabelas.
Nó frontend — Camada de acesso que gerencia as conexões recebidas. O total de conexões de uma instância equivale a: conexões máximas por nó frontend × número de nós frontend.
Como a contagem de shards afeta o desempenho
O comportamento dos shards varia conforme o tipo de carga de trabalho:
|
Carga de trabalho |
Efeito de mais shards |
|
Escrita e atualização de dados |
Maior throughput — as escritas são paralelizadas entre os shards |
|
Consultas pontuais (com shard pruning) |
Maior concorrência — cada consulta atinge apenas um shard |
|
Consultas OLAP (Online Analytical Processing) |
Retornos decrescentes — múltiplos shards precisam se coordenar, aumentando a sobrecarga de agendamento |
|
Tabelas orientadas a linhas |
Melhor desempenho de leitura — distribuição natural entre os shards |
Após escalar horizontalmente uma instância, apenas o aumento de recursos de computação melhora a concorrência de consultas. Na maioria dos casos, mantenha a contagem de shards inalterada, a menos que você precise especificamente de maior throughput de escrita. Se o scale-out for inferior a cinco vezes o tamanho original, não ajuste a contagem de shards.
Não é possível modificar o número máximo de conexões. Quando uma instância sofre scale-out ou scale-in, os limites de conexão se ajustam automaticamente. No entanto, a contagem padrão de shards para bancos de dados existentes não muda durante o dimensionamento; atualize-a manualmente se necessário. Novos bancos de dados usam a contagem padrão de shards da nova especificação.
Quando ajustar sua especificação
Antes de consultar a tabela de recomendações, verifique se a especificação atual é realmente o gargalo. Os sinais abaixo indicam que provavelmente é necessário alterar a especificação:
|
Sinal |
Ação provável |
|
A contagem de conexões está próxima ou no limite da instância |
Faça scale-out (adiciona nós frontend e eleva o teto de conexões) |
|
O throughput de escrita não acompanha a taxa de ingestão |
Faça scale-out e depois aumente a contagem de shards para bancos de dados existentes |
|
A latência de consultas OLAP está alta, mas a concorrência é baixa |
Faça scale-out para obter mais nós de computação; não aumente a contagem de shards |
|
A concorrência de consultas pontuais estagnou |
Faça scale-out e depois aumente a contagem de shards se o shard pruning estiver ativo |
Execute a instrução a seguir para verificar o uso atual de conexões em relação ao limite:
-- Returns the maximum connections for a single frontend node.
-- Multiply by the number of frontend nodes to get the instance total.
show max_connections;
Se nenhum desses sinais estiver presente, a especificação atual provavelmente é suficiente.
Especificações recomendadas por volume de dados
A especificação ideal depende de mais fatores além da contagem de linhas. Frequência de acesso, volume de dados acessados, carga de computação (consultas pontuais vs. análises), throughput de escrita e quantidade de tabelas dentro de um Table Group também influenciam. Utilize a tabela a seguir como ponto de partida.
Estas recomendações são diretrizes, não limites rígidos. Uma tabela com pouco volume de dados pode rodar em uma instância com muitos shards; uma tabela grande pode rodar em uma instância com um único shard. Alinhe a contagem de shards à sua meta de concorrência, mantendo os dados concentrados o bastante para evitar sobrecarga desnecessária de reorganização.
|
Tamanho total dos dados |
Especificação recomendada |
Contagem de shards recomendada |
Adequação da carga de trabalho |
|
Menos de 40 milhões de linhas |
32 núcleos ou mais |
10–20 |
Desenvolvimento e testes. Não adequado para testes de estresse. |
|
40 milhões–400 milhões de linhas |
64 núcleos ou mais |
20–40 |
Cargas de trabalho simples: throughput de escrita moderado, sem concorrência mista de OLAP + consultas pontuais. |
|
400 milhões–4 bilhões de linhas |
128 núcleos ou mais |
40–80 |
Equilíbrio entre escritas e consultas. Ponto de partida padrão para produção. |
|
4 bilhões–40 bilhões de linhas |
256 núcleos ou mais |
80–240 |
Escrita de alto throughput ou OLAP em larga escala. Use múltiplos Table Groups; divida por coesão de negócios ou volume de dados; especifique o Table Group explicitamente ao criar tabelas. |
|
40 bilhões–400 bilhões de linhas |
512 núcleos ou mais |
160–400 |
OLAP em escala muito grande ou cargas multi-tenant. Use múltiplos Table Groups (mesma orientação acima). Reserve contagens altas de shards apenas para tabelas muito grandes — tabelas padrão não se beneficiam disso. |
Recursos padrão por especificação de instância
Desde 25 de abril de 2022, instâncias de uso geral suportam de 512 CUs a 1.024 CUs. Para especificações superiores, envie um ticket. Antes de fazer upgrade para uma especificação maior, atualize a instância para a versão V1.1.58 ou posterior.
Instâncias de grupo de computação suportam qualquer especificação de 32 CUs a 8.192 CUs sem necessidade de ticket.
Cada 16 CUs correspondem a um nó de computação.
Para especificações de até 512 CUs: o número de nós de computação é igual ao número de nós frontend.
Total máximo de conexões = conexões máximas por nó frontend × número de nós frontend. Os valores entre parênteses mostram o valor por nó seguido pela quantidade de nós.
|
Especificação da instância |
Nós de computação |
Contagem padrão de shards |
Conexões máximas (V2.1 e anteriores) |
Conexões máximas (V2.2 e posteriores) |
Conexões reservadas para Superuser (V1.1 e posteriores) |
|
32 CUs |
2 |
20 |
256 (128 × 2) |
512 (256 × 2) |
10 (5 × 2) |
|
48–80 CUs |
3–5 |
40 |
128 × número de nós de computação |
256 × número de nós de computação |
5 × número de nós de computação |
|
96–112 CUs |
6–7 |
60 |
128 × número de nós de computação |
256 × número de nós de computação |
5 × número de nós de computação |
|
128–192 CUs |
8–12 |
80 |
128 × número de nós de computação |
256 × número de nós de computação |
5 × número de nós de computação |
|
208–352 CUs |
13–22 |
120 |
128 × número de nós de computação |
256 × número de nós de computação |
5 × número de nós de computação |
|
368–992 CUs |
23–62 |
160 |
128 × número de nós de computação |
256 × número de nós de computação |
5 × número de nós de computação |
O que muda automaticamente durante o dimensionamento
Ao realizar scale-out ou scale-in em uma instância, as seguintes alterações ocorrem automaticamente:
|
Configuração |
Comportamento durante o dimensionamento |
|
Conexões máximas |
Ajustadas automaticamente para corresponder à nova especificação |
|
Contagem padrão de shards (novos bancos de dados) |
Usa o padrão da nova especificação |
|
Contagem padrão de shards (bancos de dados existentes) |
Não muda — atualize manualmente se necessário |
Isso significa que, após um scale-out, os bancos de dados existentes mantêm sua contagem original de shards. Os nós de computação adicionais ainda melhoram a concorrência de consultas porque mais núcleos processam cada consulta. Atualize a contagem de shards manualmente apenas se precisar de maior throughput de escrita ou planejar adicionar significativamente mais dados.
Visualizar e gerenciar conexões
Verificar o limite atual de conexões
Após conectar-se a uma ferramenta de desenvolvimento, execute a instrução a seguir para ver o máximo de conexões de um único nó frontend:
-- View the maximum connections for a single frontend node.
-- Connections are balanced across all frontend nodes.
show max_connections;
Multiplique o valor retornado pelo número de nós frontend para obter o limite total de conexões da instância.
Gerenciar conexões ao atingir o limite
Cada instância reserva conexões para a função Superuser. Quando o limite de conexões é atingido, um Superuser pode se conectar e usar SQL para visualizar e liberar conexões ociosas, ou escalar verticalmente a instância. Para detalhes, consulte Connections.
Visualizar e modificar a contagem de shards
Fazer scale-out em uma instância não altera a contagem de shards dos bancos de dados existentes; ajuste-a manualmente se sua carga de trabalho exigir. Aumente a contagem de shards quando precisar de maior throughput de escrita. Para tabelas orientadas a linhas, mais shards também melhoram o desempenho de leitura devido à distribuição natural dos dados.
Para instruções, consulte Table Group and Shard Count user guide.
Próximos passos
Table Group and Shard Count user guide — Criar Table Groups e ajustar contagens de shards
Connections — Monitorar e liberar conexões ociosas