Os hints SQL permitem substituir as decisões padrão de roteamento de um endpoint de cluster configurado com Read/Write (Automatic Read/Write Splitting). Os hints possuem a maior prioridade de roteamento e ignoram tanto os níveis de consistência quanto a divisão de transações. Avalie o impacto antes de utilizá-los em produção.
Limites
Os hints funcionam apenas em endpoints de cluster cujo modo de leitura/gravação está definido como Read/Write (Automatic Read/Write Splitting). Eles não são suportados em endpoints de cluster ou endpoints primários configurados como Read-only.
Para obter detalhes sobre os modos de leitura/gravação dos endpoints, consulte a seção "Modos de leitura/gravação para endpoints de cluster" em Endpoints.
Hints disponíveis
|
Hint |
Roteia para |
Uso típico |
|
|
Nó primário |
Força uma leitura a ser executada no nó primário |
|
|
Nó somente leitura |
Direciona uma instrução para um nó somente leitura em um endpoint de leitura/gravação |
|
|
Nó específico (instrução única) |
Depura ou inspeciona um nó específico |
|
|
Nó específico (todas as instruções subsequentes) |
Fixa uma sessão em um nó — use com cautela |
|
|
Todos os nós |
Consulta tabelas do sistema em todo o cluster |
|
|
Nós de column store |
Força consultas analíticas para nós In-Memory Column Index (IMCI) |
Os hints não diferenciam maiúsculas de minúsculas e devem ser posicionados antes da instrução SQL.
Ao executar hints a partir do cliente de linha de comando do MySQL, utilize o sinalizador-c(ou--comments). Sem ele, o cliente remove o hint antes de enviar a consulta ao servidor. Consulte Opções do cliente MySQL .
Uso
/*FORCE_MASTER*/ — rotear para o nó primário
Adicione este hint antes de qualquer instrução SQL para enviá-la ao nó primário, independentemente da lógica de roteamento padrão.
/*FORCE_MASTER*/ SELECT * FROM test;
Sem o hint, SELECT * FROM test é roteado para um nó somente leitura. Com o hint, a execução ocorre no nó primário.
Este hint não tem efeito em endpoints configurados como Read-only — a instrução não é redirecionada para o nó primário.
/*FORCE_SLAVE*/ — rotear para um nó somente leitura
Utilize este hint para enviar explicitamente uma instrução a um nó somente leitura.
/*FORCE_SLAVE*/ SELECT * FROM orders WHERE status = 'shipped';
Não combine hints com instruções que alteram variáveis de sessão. Por exemplo, /*FORCE_SLAVE*/ SET NAMES utf8; pode causar erros.
/*force_node='<Node ID>'*/ — direcionar a um nó específico (instrução única)
Aplique este hint para executar uma única instrução SQL no nó especificado.
/*force_node='pi-bpxxxxxxxx'*/ SHOW PROCESSLIST;
Caso o nó especificado esteja indisponível, o seguinte erro será retornado:
force hint server node is not found, please check.
/*force_proxy_internal*/set force_node — fixar uma sessão em um nó específico
Execute esta instrução para rotear todas as instruções SQL subsequentes da sessão para um nó específico.
/*force_proxy_internal*/set force_node = 'pi-bpxxxxxxxx';
Se o nó falhar, o seguinte erro será retornado:
set force node 'rr-bpxxxxx' is not found, please check.
Evite usar /*force_proxy_internal*/ a menos que haja um motivo específico para fixar a sessão. Esse recurso desativa a divisão de leitura/gravação para todas as instruções subsequentes na conexão.
/*force_all*/ — transmitir para todos os nós
Inclua este hint para transmitir uma instrução para cada nó do cluster.
/*force_all*/ SELECT * FROM information_schema.processlist;
O uso de /*force_all*/ requer o PolarProxy 2.8.36 ou posterior. Para verificar e atualizar sua versão do PolarProxy, consulte Atualização de versão secundária .
Os resultados retornados dependem da consulta:
Tabelas do sistema (
information_schema.processlist,information_schema.innodb_trx,performance_schema.threads,performance_schema.metadata_locks,sys.schema_table_lock_waits): o PolarProxy transmite a instrução para todos os nós e retorna o resultado mesclado.Todas as outras tabelas e cenários: apenas os resultados do banco de dados primário são retornados.
Sem o hint, SELECT * FROM information_schema.processlist é roteado para um nó aleatório.
/*FORCE_IMCI_NODES*/ — rotear para nós de column store
Caso você tenha ativado a distribuição automática de solicitações entre nós de row store e column store, adicione este hint para forçar a execução de uma consulta nos nós de column store IMCI (In-Memory Column Index).
/*FORCE_IMCI_NODES*/ SELECT * FROM large_analytics_table;
Para mais detalhes sobre a configuração, consulte Distribuição automática de solicitações entre nós de row store e column store.