Os hints SQL personalizados do PolarDB-X 1.0 permitem controlar o roteamento e a execução de instruções SQL individuais em um banco de dados distribuído sem alterar a lógica da aplicação. Este tópico aplica-se ao PolarDB-X 1.0 V5.3 e versões posteriores.
Este tópico aplica-se ao PolarDB-X 1.0 5.3 e versões posteriores.
Como funcionam os hints SQL
O PolarDB-X 1.0 processa os hints SQL incorporados em comentários antes da execução. Um hint é uma string inserida entre /* e */ (ou /! e */) que começa com +TDDL:, seguida por um ou mais comandos de hint:
/*+TDDL: hint_command [hint_command ...]*/
/!+TDDL: hint_command [hint_command ...]*/
Cada hint_command direciona um comportamento específico, como rotear para um shard de banco de dados, habilitar a divisão de leitura e escrita ou definir um tempo limite. Separe múltiplos comandos de hint com espaços.
Examples
-- Query the names of physical tables in each database shard.
/*+TDDL:scan()*/SHOW TABLES;
-- Route the query to database shard 0000 of a read-only ApsaraDB RDS instance.
/*+TDDL:node(0) slave()*/SELECT * FROM t1;
Nos exemplos, /*+TDDL:scan()*/ e /*+TDDL:node(0) slave()*/ são hints personalizados iniciados com +TDDL:. Os comandos scan(), node(0) e slave() estão separados por espaços.
Formatos de sintaxe
O PolarDB-X 1.0 oferece suporte a dois formatos de sintaxe:
|
Formato |
Quando usar |
|
|
Uso geral. Exige a flag |
|
|
Use quando não for possível passar |
Importância da flag -c
O MySQL trata o formato /*...*/ como um comentário padrão. Por padrão, o cliente de linha de comando do MySQL remove comentários antes de enviar a instrução SQL ao servidor e ignora o hint. Adicione -c ao comando de login para preservar os hints:
mysql -h <host> -P <port> -u <username> -p -c
Para obter detalhes, consulte Comentários do MySQL e Opções do cliente mysql.
Onde posicionar um hint na instrução SQL
O PolarDB-X 1.0 aceita hints em instruções DML (Data Manipulation Language), DDL (Data Definition Language) e DAL (Data Access Language).
Posicione o hint antes da instrução ou após a primeira palavra-chave:
-- Before the statement
/*+TDDL: ... */ SELECT ...
/*+TDDL: ... */ INSERT ...
/*+TDDL: ... */ REPLACE ...
/*+TDDL: ... */ UPDATE ...
/*+TDDL: ... */ DELETE ...
/*+TDDL: ... */ CREATE TABLE ...
/*+TDDL: ... */ ALTER TABLE ...
/*+TDDL: ... */ DROP TABLE ...
/*+TDDL: ... */ SHOW ...
-- After the first keyword
SELECT /*+TDDL: ... */ ...
INSERT /*+TDDL: ... */ ...
REPLACE /*+TDDL: ... */ ...
UPDATE /*+TDDL: ... */ ...
DELETE /*+TDDL: ... */ ...
Hints diferentes aplicam-se a tipos distintos de instruções. Verifique o tópico de cada comando de hint para confirmar as instruções compatíveis.
Restrições ao usar múltiplos hints
Combine vários comandos dentro de um único hint. Não use hints separados na mesma instrução.
-- Correct: two commands in one hint
SELECT /*+TDDL:node(0) slave()*/ * FROM orders;
-- Incorrect: two separate hints in one statement
SELECT /*+TDDL:node(0)*/ /*+TDDL:slave()*/ * FROM orders;
-- Incorrect: duplicate commands in one hint
SELECT /*+TDDL:node(0) node(1)*/ * FROM orders;
Categorias de hints disponíveis
Os hints SQL personalizados do PolarDB-X 1.0 dividem-se em quatro categorias, cada uma atuando em um ponto de controle diferente durante a execução da consulta:
Divisão de leitura e escrita — Roteia leituras para nós somente leitura.
Especificar um tempo limite personalizado para uma instrução SQL — Substitui o tempo limite padrão de execução.
Especificar shards de banco de dados para execução — Roteia uma instrução para shards específicos.
Varrer shards de tabela em shards de banco de dados — Consulta todos ou alguns shards de tabela e de banco de dados selecionados.
Solução de problemas
Hints ignorados
Geralmente, o cliente de linha de comando do MySQL remove os comentários /*...*/. Mude para o formato /!+TDDL:...*/ ou reconecte-se com a flag -c:
mysql -h <host> -P <port> -u <username> -p -c