Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Statement concurrency control

Última atualização: Jul 08, 2026

O Alibaba Cloud oferece o recurso de controle de concorrência (CCL) e o pacote DBMS_CCL para garantir a estabilidade das instâncias do ApsaraDB RDS for MySQL diante de tráfego inesperado de requisições, instruções que consomem muitos recursos e alterações no modelo de acesso SQL. O recurso CCL baseia-se em regras de sintaxe. Use o pacote DBMS_CCL para limitar o número máximo de instruções SQL executadas simultaneamente para tipos específicos. Quando a quantidade de instruções SQL em execução simultânea atinge o limite superior, as instruções excedentes entram em estado de espera até que o total fique abaixo desse limite.

Pré-requisitos

A instância RDS deve executar uma das seguintes versões do MySQL:

  • MySQL 8.4

  • MySQL 8.0 com versão secundária do mecanismo 20190816 ou posterior

  • MySQL 5.7 com versão secundária do mecanismo 20200630 ou posterior

Parâmetros

Parâmetro

Descrição

ccl_max_waiting_count

Número máximo de instruções SQL correspondentes à mesma regra CCL que podem permanecer no estado Concurrency control waiting. Se esse limite for ultrapassado, as instruções falharão e retornarão o erro ERROR 7534 (HY000): Concurrency control waiting count exceed max waiting count. O valor padrão é 0, o que indica ausência de limite.

ccl_wait_timeout

Tempo máximo que uma instrução SQL pode aguardar no estado Concurrency control waiting. Caso esse prazo seja excedido, a instrução SQL será executada e deixará de ser limitada pelo CCL. O valor padrão é 86400s.

Observações de uso

  • As operações de CCL afetam apenas a instância RDS atual, pois não geram logs. Por exemplo, operações de CCL realizadas na instância RDS primária não são sincronizadas com a instância RDS secundária, a instância RDS somente leitura ou a instância RDS de recuperação de desastres.

  • O CCL dispõe de um mecanismo de timeout para resolver deadlocks de transação causados por instruções DML. As threads pendentes também respondem ao timeout da transação e à finalização da thread para evitar deadlocks.

Descrição do recurso

O CCL fornece funcionalidades baseadas nas seguintes dimensões:

  • Comando SQL: Tipo do comando SQL, como SELECT, UPDATE, INSERT ou DELETE.

  • Objeto: Objeto no qual o comando SQL é executado, como TABLE ou VIEW.

  • Palavras-chave: Palavras-chave presentes em um comando SQL.

  • Modelo: Modelo de um comando SQL.

Criar uma tabela CCL

O AliSQL utiliza uma tabela de sistema chamada concurrency_control para armazenar regras CCL. O sistema cria essa tabela automaticamente durante a inicialização. Execute as instruções a seguir para criar a tabela:

CREATE TABLE `concurrency_control` (
  `Id` bigint NOT NULL AUTO_INCREMENT,
  `Type` enum('SELECT','UPDATE','INSERT','DELETE','TEMPLATE') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'SELECT',
  `Schema_name` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `Table_name` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `Concurrency_count` bigint NOT NULL,
  `Keywords` text COLLATE utf8mb3_bin,
  `State` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'Y',
  `Ordered` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Digest` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `SQL_template` longtext COLLATE utf8mb3_bin,
  PRIMARY KEY (`Id`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 COMMENT='Concurrency control'

Parâmetro

Descrição

Id

ID da regra CCL.

Type

Tipo da instrução SQL.

Schema_name

Nome do banco de dados.

Table_name

Nome da tabela no banco de dados.

Concurrency_count

Contagem de concorrência. Se você definir este parâmetro como 0, todas as instruções SQL correspondentes à regra serão negadas e retornarão o erro ERROR 7535 (HY000): Concurrency control refuse to execute query.

Keywords

Palavra-chave. Separe múltiplas palavras-chave com ponto e vírgula (;).

State

Define se a regra deve ser ativada.

Ordered

Define se várias keywords devem ser correspondidas em sequência.

Digest

String hash de 64 bytes obtida mediante cálculo de hash baseado no SQL_template.

SQL_template

Modelo da instrução SQL.

Gerenciar regras CCL

O AliSQL disponibiliza quatro interfaces de gerenciamento no pacote DBMS_CCL. A lista a seguir descreve essas interfaces:

add_ccl_rule: Adicionar uma regra

  • Sintaxe

    dbms_ccl.add_ccl_rule('<Type>','<Schema_name>','<Table_name>',<Concurrency_count>,'<Keywords>');
  • Exemplos

    • Defina a contagem de concorrência para todas as instruções SELECT como 10.

      mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 10, '');
    • Configure a contagem de concorrência como 20 para instruções SELECT que contenham a palavra-chave key1.

      mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 20, 'key1');
    • Estabeleça a contagem de concorrência em 20 para instruções SELECT executadas na tabela test.t e que contenham a palavra-chave key2.

      mysql> call dbms_ccl.add_ccl_rule('SELECT', 'test', 't', 20, 'key2');

add_ccl_template_rule: Adicionar uma regra de modelo

  • Pré-requisitos

    Para adicionar uma regra de modelo, sua instância deve executar uma das seguintes versões:

    • MySQL 8.4

    • MySQL 8.0 com versão secundária do mecanismo 20230630 ou posterior

    • MySQL 5.7 com versão secundária do mecanismo 20241231 ou posterior

  • Sintaxe

    dbms_ccl.add_ccl_rule('<Type>','<Schema_name>','<Table_name>',<Concurrency_count>,'', 'Template_sql');
    Nota
    • Não é necessário especificar o parâmetro Table_name. É obrigatório especificar uma instrução SQL para o parâmetro Template_sql.

    • Use a função integrada STATEMENT_DIGEST_TEXT para visualizar o modelo SQL correspondente à instrução SQL.

  • Exemplo

    Defina a contagem de concorrência como 30 para instruções SQL no banco de dados test que correspondam ao modelo 'SELECT c FROM t1 WHERE id=?'.

    call dbms_ccl.add_ccl_rule('TEMPLATE', 'test', '', 30, '', 'SELECT c FROM t1 WHERE id=4');
    Nota
    • Cada instrução SQL pode corresponder a apenas uma regra.

    • As regras de diferentes tipos são listadas em ordem decrescente: regra de modelo, regra completa, regra de palavra-chave, regra de instrução SQL. Cada conjunto de regras é verificado sequencialmente para determinar se houve correspondência.

del_ccl_rule: Excluir uma regra

  • Sintaxe

    dbms_ccl.del_ccl_rule(<Id>);
  • Exemplo

    Exclua a regra CCL cujo ID é 15.

    mysql> call dbms_ccl.del_ccl_rule(15);
    Nota

    Se a regra que você deseja excluir não existir, o sistema emitirá um aviso. Execute o comando show warnings; para visualizar os detalhes do aviso.

    mysql> call dbms_ccl.del_ccl_rule(100);
      Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    mysql> show warnings;
    +---------+------+----------------------------------------------------+
    | Level   | Code | Message                                            |
    +---------+------+----------------------------------------------------+
    | Warning | 7514 | Concurrency control rule 100 is not found in table |
    | Warning | 7514 | Concurrency control rule 100 is not found in cache |
    +---------+------+----------------------------------------------------+

show_ccl_rule: Visualizar regras ativadas

  • Sintaxe

    dbms_ccl.show_ccl_rule();
  • Exemplo

    mysql> call dbms_ccl.show_ccl_rule();
    +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+
    | ID   | TYPE   | SCHEMA | TABLE | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS |
    +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+
    |   17 | SELECT | test   | t     | Y     | N     |                30 |       0 |       0 |        0 |          |
    |   16 | SELECT |        |       | Y     | N     |                20 |       0 |       0 |        0 | key1     |
    |   18 | SELECT |        |       | Y     | N     |                10 |       0 |       0 |        0 |          |
    +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+

    A tabela a seguir descreve MATCHED, RUNNING e WAITTING.

    Parâmetro

    Descrição

    MATCHED

    Quantidade de vezes que a regra foi correspondida.

    RUNNING

    Número de threads em execução simultânea sob esta regra.

    WAITTING

    Total de threads pendentes associadas à regra.

flush_ccl_rule: Aplicar regras

  • Sintaxe

    Alterações diretas na tabela concurrency_control não entram em vigor imediatamente. Execute o comando abaixo para aplicar as regras:

    dbms_ccl.flush_ccl_rule();
  • Exemplo

    mysql> update mysql.concurrency_control set CONCURRENCY_COUNT = 15 where Id = 18;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> call dbms_ccl.flush_ccl_rule();
    Query OK, 0 rows affected (0.00 sec)

Teste do recurso

  • Script de teste

    Execute as instruções a seguir para criar regras para três dimensões.

    -- Create a rule for which the number of concurrent SELECT statements with the sbtest1 keyword is 3.
    call dbms_ccl.add_ccl_rule('SELECT', 'test', 'sbtest1', 3, '');
    
    -- Create a rule for which the number of concurrent SELECT statements with the sbtest2 keyword is 2.
    call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, 'sbtest2');  
    
    -- Create a rule for which the number of concurrent SELECT statements is 2.
    call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, '');
  • Cenário de teste

    Use o sysbench para realizar testes nos seguintes cenários:

    • 64 threads

    • 4 tabelas

    • select.lua

  • Resultados do teste

    Execute a instrução abaixo para consultar o número de threads simultâneas sob as regras:

    mysql> call dbms_ccl.show_ccl_rule();
    +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+
    | ID   | TYPE   | SCHEMA | TABLE   | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS |
    +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+
    |   20 | SELECT | test   | sbtest1 | Y     | N     |                 3 |     389 |       3 |        9 |          |
    |   21 | SELECT |        |         | Y     | N     |                 2 |     375 |       2 |       14 | sbtest2  |
    |   22 | SELECT |        |         | Y     | N     |                 2 |     519 |       2 |       34 |          |
    +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+
    3 rows in set (0.00 sec)

    Os valores exibidos na coluna RUNNING correspondem aos definidos durante a criação das regras.