A limitação de SQL permite restringir o número de instruções SQL simultâneas em um banco de dados. Assim, um aumento repentino em um tipo específico de consulta não consome todos os recursos nem derruba o banco de dados.
Como funciona
Ao criar uma regra de limitação, o Database Autonomy Service (DAS) monitora todas as instruções SQL recebidas e verifica cada uma com base nos critérios de correspondência da regra: palavras-chave ou modelo SQL. Quando a quantidade de instruções correspondentes em execução simultânea atinge a concorrência máxima configurada, as novas instruções correspondentes entram em fila de espera ou são rejeitadas imediatamente, dependendo da versão e da configuração da instância.
Fluxo da solicitação:
Uma instrução SQL chega ao banco de dados.
O DAS verifica se a instrução corresponde à regra de limitação (por palavra-chave, modelo, ID do modelo ou tempo de execução).
Se a instrução corresponder e o limite de concorrência ainda não tiver sido atingido, ela será executada normalmente.
-
Se o limite de concorrência for atingido:
Concorrência máxima = número inteiro positivo: A instrução entra em fila de espera. Se o tamanho da fila exceder
ccl_max_waiting_count, o banco de dados retornará um erro.Maximum concurrency = 0: A instrução é rejeitada imediatamente e o banco de dados retorna um erro.
Casos de uso
|
Cenário |
Exemplo |
|
Pico de concorrência em um tipo específico de consulta |
Penetração de cache ou chamadas anormais da aplicação causam aumento repentino na concorrência de SQL |
|
Consultas que causam distorção de dados |
Consultas frequentes a dados quentes durante promoção de vendas sobrecarregam todo o sistema |
|
Varreduras completas de tabela devido à falta de índices |
Alto volume de chamadas SQL em tabelas sem índices torna o sistema lento |
Bancos de dados compatíveis
|
Mecanismo de banco de dados |
Versões compatíveis |
|
ApsaraDB RDS for MySQL |
5,6, 5,7, 8,0 |
|
ApsaraDB RDS for PostgreSQL |
13 (versão secundária do mecanismo 20250430 ou posterior), 14 (versão secundária 20230330 ou posterior), 15 (versão secundária 20230330 ou posterior), superior a 15 (sem requisito de versão secundária) |
|
PolarDB for MySQL |
5,6, 5,7, 8,0 |
|
PolarDB-X 2.0 |
— |
Modos de limitação
Escolha o modo adequado para identificar as instruções SQL a limitar.
|
Modo |
Descrição |
Bancos de dados aplicáveis |
|
Throttle by keyword |
Limita instruções SQL contendo todas as palavras-chave especificadas. Observação: este modo não direciona uma única instrução específica; ele corresponde a qualquer instrução que contenha todas as palavras-chave listadas. |
ApsaraDB RDS for MySQL, PolarDB for MySQL, PolarDB-X 2.0 |
|
Throttle by SQL template |
Insira uma instrução SQL de exemplo. O DAS a converte em modelo e limita todas as instruções correspondentes. |
ApsaraDB RDS for MySQL 8,0 (versão secundária do mecanismo 20230630 ou posterior); ApsaraDB RDS for PostgreSQL 13 (versão secundária 20250430 ou posterior), 14/15 (versão secundária 20230330 ou posterior) e superior a 15; PolarDB for MySQL 8.0.1 (versão secundária 8.0.1.1.31 ou posterior) e 8.0.2 (versão secundária 8.0.2.2.12 ou posterior) |
|
Throttle by SQL template ID |
Insira diretamente um ID de modelo SQL. Obtenha o ID nos logs de SQL, sessões ou resultados de EXPLAIN. Um ID de modelo é uma string hexadecimal de 8 caracteres. |
PolarDB-X 2.0 Enterprise Edition |
|
Throttle by execution time |
Defina um limiar de tempo de execução. O DAS adiciona automaticamente os IDs de modelo das instruções que excedem o limiar à regra de limitação e aplica o limite de concorrência configurado. |
PolarDB-X 2.0 Enterprise Edition |
Crie uma regra de limitação
A limitação de SQL é uma medida de emergência. Defina duração curta e desative a regra assim que resolver a situação.
Faça login no console do DAS.
No painel de navegação à esquerda, clique em Intelligent O&M Center > Instance Monitoring.
Localize a instância de destino e clique no ID da instância para acessar a página de detalhes.
No painel de navegação à esquerda, clique em Instance Sessions.
Na página Session Management, clique em SQL Throttling.
Na caixa de diálogo exibida, clique em Create Throttling Rule.
Na caixa de diálogo Create Throttling Rule, configure os parâmetros do mecanismo de banco de dados.
ApsaraDB RDS for MySQL
| Parâmetro | Descrição |
|---|---|
| Throttling mode | Selecione um modo de limitação. |
| SQL type | Selecione o tipo de instrução SQL a limitar: SELECT, UPDATE, DELETE ou INSERT. Obrigatório quando Throttling mode estiver definido como Throttle by keyword. Nota
Instruções INSERT só podem ser limitadas no ApsaraDB RDS for MySQL 8,0, PolarDB for MySQL 5,7 e 8,0 e PolarDB-X 2.0. Instruções |
| Database | Banco de dados onde aplicar a regra de limitação. Obrigatório quando Throttling mode estiver definido como Throttle by SQL template. |
| Maximum concurrency | Número máximo de instruções SQL executadas simultaneamente. Valor mínimo: 0. A limitação é acionada quando as instruções correspondentes simultâneas atingem esse número. |
| Throttling duration | Período em que a regra de limitação permanece ativa. Desative a regra manualmente se a situação for resolvida antes do término da duração. |
| SQL keyword | Obrigatório quando Throttling mode estiver definido como Throttle by keyword. Insira as palavras-chave que identificam as instruções a limitar. Separe várias palavras-chave com til (~). Uma instrução só será limitada se contiver todas as palavras-chave especificadas, independentemente da ordem. Nota
As palavras-chave diferenciam maiúsculas de minúsculas na maioria das versões. Não use apenas |
| SQL sample | Obrigatório quando Throttling mode estiver definido como Throttle by SQL template. Insira uma instrução SQL representativa. O DAS a converte em modelo substituindo valores literais por espaços reservados. Por exemplo, select name from das where name = \das\ and age = 21 limit 20 torna-se o modelo select name from das where name = ? and age = ? limit ?. A normalização da amostra pelo DAS não afeta o efeito da limitação. |
ApsaraDB RDS for PostgreSQL
O ApsaraDB RDS for PostgreSQL oferece suporte apenas ao modo Throttle by SQL template.
|
Parâmetro |
Descrição |
|
Database |
Banco de dados onde aplicar a regra de limitação. |
|
Search path |
Caminho de busca de esquema para a regra de limitação. Separe vários caminhos com vírgulas ( |
|
Maximum concurrency |
Número máximo de instruções SQL executadas simultaneamente. Valor mínimo: 0. A limitação é acionada quando as instruções correspondentes simultâneas atingem esse número. |
|
Maximum waiting queries |
Quantidade máxima de instruções permitidas na fila de espera. |
|
Throttling duration |
Período em que a regra de limitação permanece ativa. Desative a regra manualmente se a situação for resolvida antes do término da duração. |
|
SQL sample |
Insira uma instrução SQL representativa. O DAS a converte em modelo substituindo valores literais por espaços reservados. Por exemplo, |
PolarDB for MySQL
| Parâmetro | Descrição |
|---|---|
| Throttling mode | Selecione um modo de limitação. |
| SQL type | Selecione o tipo de instrução SQL a limitar: SELECT, UPDATE, DELETE ou INSERT. Nota
Instruções INSERT só podem ser limitadas no ApsaraDB RDS for MySQL 8,0, PolarDB for MySQL 5,7 e 8,0 e PolarDB-X 2.0. Instruções |
| Maximum concurrency | Número máximo de instruções SQL executadas simultaneamente. Valor mínimo: 0. |
| Database | Banco de dados onde aplicar a regra de limitação. Obrigatório quando Throttling mode estiver definido como Throttle by SQL template. |
| Throttling duration | Período em que a regra de limitação permanece ativa. |
| SQL keyword | Obrigatório quando Throttling mode estiver definido como Throttle by keyword. Aplicam-se as mesmas regras do ApsaraDB RDS for MySQL. Separe várias palavras-chave com ~. A instrução deve conter todas as palavras-chave especificadas para ser limitada. |
| SQL sample | Obrigatório quando Throttling mode estiver definido como Throttle by SQL template. O DAS converte a amostra em modelo substituindo valores literais por espaços reservados. |
PolarDB-X 2.0
| Parâmetro | Descrição |
|---|---|
| Throttling mode | Selecione um modo de limitação. |
| SQL type | Selecione o tipo de instrução SQL a limitar: SELECT, UPDATE, DELETE ou INSERT. Nota
Instruções INSERT só podem ser limitadas no ApsaraDB RDS for MySQL 8,0, PolarDB for MySQL 5,7 e 8,0 e PolarDB-X 2.0. Instruções |
| Maximum concurrency | Número máximo de instruções SQL executadas simultaneamente. Valor mínimo: 0. |
| Throttling duration | Período em que a regra de limitação permanece ativa. |
| SQL keyword | Obrigatório quando Throttling mode estiver definido como Throttle by keyword. Separe várias palavras-chave com ~. A instrução deve conter todas as palavras-chave especificadas para ser limitada. |
| SQL template ID | Obrigatório para o PolarDB-X 2.0 Enterprise Edition quando Throttling mode estiver definido como Throttle by SQL template. Insira um ou mais IDs de modelo hexadecimais de 8 caracteres, separados por vírgulas (,). Obtenha os IDs de modelo nos logs de SQL, sessões ou resultados de EXPLAIN. |
| Minimum SQL execution duration | Obrigatório para o PolarDB-X 2.0 Enterprise Edition quando Throttling mode estiver definido como Throttle by execution time. Limiar de tempo de execução. Quando uma instrução excede esse limiar, o DAS adiciona automaticamente seu ID de modelo à regra de limitação. |
| Maximum throttled SQL IDs | Obrigatório para o PolarDB-X 2.0 Enterprise Edition quando Throttling mode estiver definido como Throttle by execution time. Número máximo de IDs de modelo SQL passíveis de limitação. Após atingir esse limite, o DAS para de adicionar novos IDs de modelo, mesmo que outras instruções excedam o limiar. |
| Database account with throttled queries | Obrigatório quando Throttling mode estiver definido como Throttle by keyword ou Throttle by SQL template. Conta do banco de dados cujas instruções SQL estão sujeitas à limitação. |
Clique em Submit para crie a regra.
Comportamento de limitação e códigos de erro
Quando uma regra de limitação é acionada, o banco de dados retorna um erro à aplicação. O código de erro exato depende da versão da instância e da concorrência máxima configurada.
| Concorrência máxima | Instância | Código de erro | Mensagem de erro |
|---|---|---|---|
| 0 ou número inteiro positivo | ApsaraDB RDS for MySQL 5,6 | 1317 | query execution was interrupted |
| ApsaraDB RDS for MySQL 5,7 (versão secundária anterior a 20200630) | 1317 | ||
| PolarDB for MySQL 5,6 | 1317 | ||
| Número inteiro positivo | ApsaraDB RDS for MySQL 5,7 (versão secundária 20200630 ou posterior) | 5041 | Concurrency control waiting count exceed max waiting count |
| ApsaraDB RDS for MySQL 8,0 | 7534 | ||
| PolarDB for MySQL 5,7 | 3277 | ||
| PolarDB for MySQL 8,0 | 7533 | ||
| 0 | ApsaraDB RDS for MySQL 5,7 (versão secundária 20200630 ou posterior) | 5042 | Concurrency control refuse to execute query |
| ApsaraDB RDS for MySQL 8,0 | 7535 | ||
| PolarDB for MySQL 5,7 | 3278 | ||
| PolarDB for MySQL 8,0 | 7534 |
Parâmetros adicionais para instâncias compatíveis:
ccl_max_waiting_count(ApsaraDB RDS for MySQL 5,7 versão secundária 20200630 ou posterior, ApsaraDB RDS for MySQL 8,0): Define o tamanho máximo da fila. Se definido como 0, o DAS usa o valor padrão 10.ccl_wait_timeout(ApsaraDB RDS for MySQL 5,7 versão secundária 20200630 ou posterior, ApsaraDB RDS for MySQL 8,0): Define tempo limite para instruções em espera, caso a versão da instância ofereça suporte. Instruções que excedem esse tempo limite continuam a execução e deixam de estar sujeitas à limitação.-
ccl_mode(PolarDB for MySQL 8,0): Controla o comportamento quando o limite de concorrência é excedido. Este parâmetro está disponível apenas nas versões de instância compatíveis.WAIT(padrão): As instruções aguardam em fila.REFUSE: As instruções são rejeitadas imediatamente, sem espera.
Visualize e gerencie regras de limitação
Após criar uma regra, ela aparece na aba Running com os seguintes detalhes.
As colunas exibidas variam conforme o mecanismo de banco de dados e o modo de limitação.
|
Coluna |
Descrição |
|
Throttling mode |
Modo selecionado durante a criação da regra. |
|
Throttling rule |
Configuração da regra: palavras-chave (modo de palavra-chave), ID do modelo (modo de modelo) ou limiar de tempo de execução e contagem de instruções limitadas (modo de tempo de execução). |
|
Maximum concurrency |
Limite de concorrência configurado. |
|
Maximum waiting queries |
Tamanho máximo da fila. Exibido para ApsaraDB RDS for PostgreSQL no modo de modelo SQL. |
|
Throttling duration (min) |
Duração ativa configurada. |
|
Start time |
Horário em que a regra entrou em vigor. |
|
Remaining time (s) |
Tempo restante antes da expiração da regra. |
|
Sample SQL |
Amostra de SQL usada para gerar o modelo. Exibido no modo de modelo SQL. |
|
Throttling template ID |
ID do modelo correspondente à amostra de SQL limitada. Exibido no modo de modelo SQL. |
|
Status |
Regra em execução exibe Enabled. |
|
Database |
Banco de dados onde a regra se aplica. Exibido no modo de modelo SQL. |
|
Search path |
Caminho de busca de esquema. Exibido para ApsaraDB RDS for PostgreSQL no modo de modelo SQL. |
|
Matched SQL query |
Número de instruções SQL correspondidas pela regra. Exibido no modo de modelo SQL. |
|
Waiting SQL query |
Número de instruções SQL atualmente em fila de espera. Exibido no modo de modelo SQL. |
|
Actions |
Disable ou Modify a regra. |
Próximos passos
Limitação automática de SQL — permita que o DAS detecte e aplique regras de limitação automaticamente.
Referência de API
|
API |
Descrição |
|
Ativa a limitação de SQL. |
|
|
Desativa uma regra de limitação específica. |
|
|
Desativa todas as regras de limitação em execução. |
|
|
Obtém as regras de limitação em execução. |
|
|
Obtém regras de limitação em execução ou já acionadas. |
|
|
Gera palavras-chave de limitação a partir de uma instrução SQL. |