Todos os produtos
Search
Central de documentação

PolarDB:Distribuição manual de requisições entre nós de armazenamento em linha e em coluna

Última atualização: Jun 28, 2026

Quando um cluster HTAP do PolarDB for MySQL atende simultaneamente cargas de trabalho OLTP e OLAP, a mistura desses dois tipos de tráfego no mesmo endpoint de cluster pode fazer com que consultas de armazenamento em linha compitam por recursos com consultas analíticas. Para isolar o tráfego, configure endpoints de cluster separados — um direcionado aos nós de armazenamento em linha para OLTP e outro aos nós de armazenamento em coluna para OLAP — e direcione cada aplicação para seu respectivo endpoint.

Funcionamento do roteamento

O PolarDB roteia requisições em três camadas. Compreender essa ordem ajuda a decidir onde intervir quando o roteamento não ocorre conforme o esperado.

Camada

Mecanismo

Escopo

1. Endpoint de cluster

Restringe quais nós um endpoint pode alcançar

Nível de conexão

2. Otimização baseada em custo

Selecione um plano de execução de armazenamento em linha ou em coluna com base no custo estimado

Nível de instrução (automático)

3. SQL hint

Força um plano de execução específico, substituindo a otimização baseada em custo

Nível de instrução (manual)

Em condições normais, a camada 1 separa o tráfego OLTP do OLAP, enquanto a camada 2 cuida da seleção de planos automaticamente. Utilize a camada 3 apenas quando a seleção automática gerar resultados inesperados para uma instrução específica.

As regras padrão de roteamento são:

  • Requisições de escrita OLTP: sempre roteadas para o nó primário.

  • Requisições de leitura OLTP: roteadas para nós de armazenamento em linha somente leitura ou para o nó primário.

  • Requisições de leitura OLAP: roteadas para nós de armazenamento em coluna somente leitura.

独立

Configure endpoints de cluster

Configure dois endpoints de cluster: um para tráfego OLTP e outro para tráfego OLAP. Para obter instruções sobre como criar e gerencie endpoints de cluster, consulte Gerenciar os endpoints de um cluster.

Endpoint OLTP

Escolha um dos seguintes modos:

Modo

Configuração de nós

Read-only

Adicione apenas nós de armazenamento em linha somente leitura à lista de nós selecione.

Read/Write (Automatic Read/Write Splitting)

Adicione pelo menos um nó de armazenamento em linha somente leitura. Se Primary Node Accepts Read Requests estiver defina como Yes, as requisições de leitura também serão distribuídas para o nó primário.

Nota

No modo Read/Write (Automatic Read/Write Splitting), todas as requisições de escrita vão para o nó primário, independentemente de ele estar na lista de nós selecione.

Endpoint OLAP

Cargas de trabalho OLAP envolvem apenas requisições de leitura. Use o modo Read-only e adicione pelo menos um nó de armazenamento em coluna somente leitura à lista de nós selecione.

Substituir o roteamento com SQL hints

Após uma instrução chegar a um nó de armazenamento em coluna somente leitura, o PolarDB compara o custo estimado de execução com o parâmetro loose_cost_threshold_for_imci para defina o plano de execução. Se o custo exceder o limiar, o PolarDB utiliza o plano de armazenamento em coluna fornecido pelo In-Memory Column Index (IMCI); caso contrário, usa o plano de armazenamento em linha.

Para substituir essa seleção automática em uma instrução específica, adicione um SQL hint. O hint aplica-se somente à instrução anotada e não afeta outras instruções na mesma conexão ou em conexões diferentes.

Nota

Para MySQL 5.7.7 e versões anteriores, adicione a opção --comments ao se conectar ao mecanismo de banco de dados. Caso contrário, o cliente remove os hints antes de enviar a instrução. Execute mysql --version para verificar a versão do seu cliente.

Forçar um plano de execução de armazenamento em coluna

Adicione /*+ SET_VAR(cost_threshold_for_imci=0) */ para defina o limiar de custo como 0 e forçar o plano de armazenamento em coluna, independentemente do custo estimado real.

/*FORCE_IMCI_NODES*/EXPLAIN SELECT /*+ SET_VAR(cost_threshold_for_imci=0) */ COUNT(*) FROM t1 WHERE t1.a > 1;
Nota

Dentro de /*+SET_VAR()*/, omita o prefixo loose_ do nome do parâmetro. Usar loose_cost_threshold_for_imci no hint anula seu efeito; use cost_threshold_for_imci em vez disso.

Forçar um plano de execução de armazenamento em linha

Adicione /*+ SET_VAR(USE_IMCI_ENGINE=OFF) */ para ignorar completamente o mecanismo de armazenamento em coluna.

EXPLAIN SELECT /*+ SET_VAR(USE_IMCI_ENGINE=OFF) */ COUNT(*) FROM t1 WHERE t1.a > 1;