O roteamento de consultas HTAP direciona automaticamente consultas OLAP para instâncias analíticas baseadas em DuckDB e consultas OLTP para instâncias orientadas a linhas, com base no custo de execução. Ative o roteamento automático ou use hints SQL para controle manual.
Visão geral
A solução de roteamento automático de consultas baseada em HTAP para RDS for MySQL aproveita as vantagens distintas de diferentes mecanismos de armazenamento. Um proxy de banco de dados encaminha automaticamente as solicitações para o tipo de instância mais adequado, com base no custo estimado de execução das consultas SQL, isolando cargas de trabalho e otimizando o desempenho.
Tipos de instância
Instância orientada a linhas: A instância primária do RDS for MySQL e as instâncias somente leitura comuns. Essas instâncias utilizam o mecanismo InnoDB e são ideais para lidar com solicitações de leitura e escrita OLTP de alta concorrência.
Instância columnstore: A instância analítica somente leitura baseada em DuckDB. Esta instância utiliza o mecanismo DuckDB e é adequada para consultas analíticas OLAP complexas.
Métodos de roteamento
O RDS for MySQL oferece suporte aos dois métodos de roteamento a seguir:
Roteamento automático de consultas baseado em HTAP: Encaminha automaticamente consultas OLAP e OLTP para instâncias columnstore ou orientadas a linhas, conforme o custo estimado de execução da SQL.
Roteamento manual com hints: Caso o roteamento automático não seja eficaz ou sua versão do MySQL não ofereça suporte à estimativa de custo, utilize um
hintpara especificar manualmente o destino do roteamento.
Visualizar o custo de execução da SQL
Ao utilizar o roteamento automático, execute o comando SHOW STATUS LIKE 'Last_query_cost' para verificar o custo estimado de execução de uma instrução SQL. Isso ajuda a entender a base para as decisões de roteamento. Recomendamos executar a instrução EXPLAIN antes de verificar o custo de execução.
Exemplo
Visualize o custo estimado de execução da instrução SELECT COUNT(*) FROM sbtest5.sbtest1:
EXPLAIN SELECT COUNT(*) FROM sbtest5.sbtest1;
SHOW STATUS LIKE 'Last_query_cost';
-- Example result:
+-------------------+---------------+
| Variable_name | Value |
+-------------------+---------------+
| Last_query_cost | 84454.999000 |
+-------------------+---------------+
O resultado indica que o custo estimado de execução da instrução SQL é 84454.999000. O sistema utiliza esse valor de custo para determinar se deve rotear a consulta para uma instância columnstore.
Pré-requisitos
Para utilizar o roteamento automático de consultas baseado em HTAP, a instância primária deve atender às seguintes condições:
A instância executa MySQL 8.0 (com versão secundária do mecanismo 20250731 ou posterior) ou MySQL 5.7 (com versão secundária do mecanismo 20260228 ou posterior).
Uma instância analítica somente leitura baseada em DuckDB foi adicionada.
O recurso de proxy de banco de dados está ativado e a versão do proxy de banco de dados é 2.25.8 ou posterior.
Para atualizar a versão secundária do mecanismo MySQL ou a versão do proxy de banco de dados, consulte Atualizar a versão secundária do mecanismo de uma instância RDS e Atualizar a versão secundária do mecanismo de um proxy de banco de dados.
Precauções
O limiar de latência e o nível de consistência do proxy de banco de dados também se aplicam às instâncias analíticas somente leitura baseadas em DuckDB.
Ao ativar o roteamento automático de consultas baseado em HTAP, defina o Read/Write Splitting Attribute do endpoint de proxy de destino como Read/Write.
O peso de leitura das instâncias analíticas somente leitura baseadas em DuckDB afeta apenas o balanceamento de carga entre essas instâncias e não influencia a lógica de roteamento entre instâncias orientadas a linhas e columnstore.
Se todas as instâncias analíticas somente leitura baseadas em DuckDB atingirem a capacidade máxima, o sistema enfileira as consultas analíticas subsequentes para processamento nessas instâncias.
Após definir a Read Weight Allocation como Custom para o endpoint de proxy, o peso de leitura de qualquer nova instância analítica somente leitura baseada em DuckDB adicionada à instância primária assume o valor padrão 0. Configure-o manualmente.
É possível configurar flexivelmente o limiar de latência, o nível de consistência, o Read/Write Splitting Attribute e os pesos de leitura do proxy de banco de dados. Para obter mais informações, consulte Configurar um proxy de banco de dados.
Ativar o roteamento de consultas HTAP
Ativar o roteamento automático de consultas
Faça login no console RDS. No painel de navegação à esquerda, clique em Instances. Na barra de navegação superior, selecione a região da instância de destino.
Na página Instances, clique no ID da instância primária de destino. A instância primária é indicada pelo ícone
.No painel de navegação à esquerda, clique em Database Proxy.
Na seção Connection Information, localize o endpoint de proxy de destino e clique em Modify Configuration na coluna Actions.
Na caixa de diálogo, ative o HTAP-based Automatic Query Routing e clique em OK.
Alocar pesos de leitura
Quando sua instância RDS for MySQL estiver configurada com múltiplas instâncias analíticas somente leitura baseadas em DuckDB, defina um peso de leitura correspondente para cada instância conforme suas necessidades de negócio. O peso de leitura para o endereço de conexão do proxy RDS for MySQL é System-assigned por padrão. Quanto maior o peso de leitura de uma instância, mais solicitações de leitura ela processa.
Faça login no console RDS. No painel de navegação à esquerda, clique em Instances. Na barra de navegação superior, selecione uma região.
Na página Instances, clique no ID da instância primária de destino, marcada com o ícone
.No painel de navegação à esquerda, clique em database proxy.
Na seção Connection Information, localize o endpoint de conexão do proxy de destino e clique em Modify Configuration na coluna Actions.
-
Na caixa de diálogo exibida, defina a Read Weight Allocation como Custom.
Após definir o valor como Custom, o peso de leitura de novas instâncias analíticas somente leitura baseadas em DuckDB para esta instância primária assume o valor padrão 0. Configure o peso de leitura manualmente.
-
Na seção Read Weight Allocation for DuckDB-based analytical read-only instances, defina o peso de leitura para cada instância analítica somente leitura baseada em DuckDB conforme necessário.
Por exemplo, suponha que o peso de leitura de uma instância primária esteja definido como 0 e os pesos de leitura de suas três instâncias analíticas somente leitura baseadas em DuckDB estejam definidos como 100, 200 e 200. Isso significa que a instância primária não processa solicitações de leitura. As solicitações de escrita continuam sendo enviadas automaticamente para a instância primária. As três instâncias somente leitura processam solicitações de leitura na proporção de 1:2:2.
NotaO peso de leitura pode ser definido com um valor de 0 a 10.000.
Caso uma instância analítica somente leitura baseada em DuckDB seja excluída, seu peso é removido automaticamente. Os pesos das demais instâncias permanecem inalterados.
As alterações neste parâmetro entram em vigor imediatamente e não causam interrupções no serviço. As conexões existentes não são encerradas. Tanto as conexões novas quanto as existentes são roteadas com base nos novos pesos.
Forçar manualmente o roteamento de consultas com sintaxe hint
Se o roteamento automático de consultas não for eficaz ou se a estimativa de custo estiver indisponível devido a limitações da versão do MySQL, adicione um hint a uma instrução SQL para forçar uma rota de consulta específica. O hint afeta apenas a instrução SQL atual.
-
Forçar roteamento para uma instância columnstore (instância analítica somente leitura baseada em DuckDB)
/*force_ap_nodes*/ SELECT COUNT(*) FROM <target_table_name>; -
Forçar roteamento para uma instância orientada a linhas (instância primária ou instância somente leitura)
SELECT /*+set_var(rds_cost_threshold_for_duckdb = 0)*/ COUNT(*) FROM <target_table_name>;
Referências
Adicionar uma instância analítica somente leitura baseada em DuckDB
-
APIs relacionadas
DescribeDBProxy: consulta os detalhes de um proxy de banco de dados.
DescribeDBProxyEndpoint: consulta informações sobre um endpoint de proxy.
ModifyDBProxyEndpoint: configura a política de acesso de um endpoint de proxy.
Apêndice: Como funciona o roteamento de consultas HTAP
O proxy de banco de dados recebe uma consulta e a encaminha para uma instância orientada a linhas, como a instância primária ou uma instância somente leitura comum.
-
O otimizador da instância orientada a linhas analisa a consulta e estima se seu custo de execução excede um limiar configurado.
Se o custo estimado de execução estiver abaixo do limiar, a instância orientada a linhas executa a consulta. Caso existam múltiplas instâncias somente leitura comuns, a consulta é roteada com base nas regras de balanceamento de carga.
Se o custo estimado de execução estiver acima do limiar, o sistema roteia a consulta para uma instância columnstore (instância analítica somente leitura baseada em DuckDB). Se houver múltiplas instâncias columnstore, a consulta é roteada conforme as regras de balanceamento de carga.