Este tópico descreve o recurso DDL mais rápido, que oferece um mecanismo otimizado de gerenciamento de buffer pool. Esse mecanismo reduz o impacto das operações de linguagem de definição de dados (DDL) e aumenta o número de operações DDL simultâneas permitidas.
Pré-requisitos
A instância RDS deve executar uma das seguintes versões do MySQL:
MySQL 8.0 (com versão secundária do mecanismo igual ou superior a 20200630).
MySQL 5.7 (com versão secundária do mecanismo igual ou superior a 20200630).
MySQL 5.6 (com versão secundária do mecanismo igual ou superior a 20200630).
Informações básicas
Operações DDL são comuns em instâncias RDS. Durante o uso da instância, você pode encontrar problemas relacionados a essas operações, como:
Por que a adição de índices causa oscilação de desempenho e interrompe as operações de leitura e gravação na instância RDS?
Por que uma operação DDL em uma tabela com menos de 1 GB leva mais de 10 minutos para ser concluída?
Por que ocorre oscilação de desempenho ao fechar uma conexão que gera tabelas temporárias?
A equipe do mecanismo de banco de dados do ApsaraDB for RDS realizou análises profundas e testes intensivos para identificar a causa desses problemas. Com base nos resultados, a equipe detectou defeitos na lógica de manutenção de cache usada no gerenciamento de operações DDL. Para corrigir essas falhas, desenvolveu-se o recurso DDL mais rápido. O mecanismo otimizado de gerenciamento de buffer pool fornecido por esse recurso reduz a contenção de locks acionados por operações DDL. Isso garante a manutenção do desempenho da instância RDS durante a execução de operações DDL sob carga de trabalho normal.
Ative o DDL mais rápido
Para ativar o recurso DDL mais rápido, defina o parâmetro loose_innodb_rds_faster_ddl como ON no console do ApsaraDB for RDS. Para obter mais informações, consulte Modifique parâmetros da instância.
Teste com operações DDL
-
Cenário de teste
Use o algoritmo in-place para executar operações DDL online pelos seguintes comandos compatíveis com o MySQL 8.0: CREATE INDEX e OPTIMIZE TABLE. O comando CREATE INDEX cria um índice em uma tabela sem reconstruí-la. Já o comando OPTIMIZE TABLE cria um índice e exige a reconstrução da tabela.
Operação
Instant
In-place
Reconstrói a tabela
Permite operações DML simultâneas
Modifica apenas metadados
CREATE INDEX
No
Yes
No
Yes
No
OPTIMIZE TABLE
No
Yes
Yes
Yes
No
-
Instância de teste
A instância RDS usada no teste executa o MySQL 8.0, possui 8 núcleos de CPU e 64 GB de memória. A tabela alvo das operações DDL tem 600 MB.
-
Procedimento de teste
Execute um teste de estresse com o SysBench. Nesse teste, realize operações DDL online e compare os resultados.
-
Resultado do teste
Operação
Duração média de execução (DDL mais rápido desativado)
Duração média de execução (DDL mais rápido ativado)
Aumento de desempenho (vezes)
CREATE INDEX
56 segundos
4,9 segundos
11,4
OPTIMIZE TABLE
220 segundos
17 segundos
12,9
-
Resumo do teste
O recurso DDL mais rápido permite que o ApsaraDB RDS for MySQL com AliSQL reduza o tempo de execução de operações DDL em mais de 90% em comparação ao MySQL Community Edition.
Teste com tabelas temporárias
Tabelas temporárias são comuns no MySQL. O sistema as cria, por exemplo, para consultar tabelas do banco de dados information_schema ou acelerar a execução de instruções SQL complexas. Quando um thread é encerrado, todas as tabelas temporárias associadas são excluídas. Trata-se de um tipo específico de operação DDL que causa oscilação de desempenho na instância RDS. Para mais detalhes, consulte Temp ibt tablespace truncation at disconnection stuck InnoDB under large BP.
-
Instância de teste
A instância RDS usada no teste executa o MySQL 8.0, com 8 núcleos de CPU e 64 GB de memória.
-
Procedimento de teste
Realize um teste de estresse com o tpcc-mysql. Execute consultas até que o buffer pool atinja capacidade próxima do máximo. Em seguida, inicie requisições single-threaded em conexões de curta duração para gerar tabelas temporárias.
-
Resultado do teste
Item de comparação
Sem operações DDL
DDL mais rápido ativado
DDL mais rápido desativado
Transações por segundo (TPS)
42.000
40.000
< 10.000
A figura abaixo apresenta os dados de desempenho por segundo obtidos no teste de estresse. As áreas destacadas em vermelho indicam o TPS suportado pela instância RDS quando o recurso DDL mais rápido está desativado.

-
Resumo do teste
No MySQL nativo, sempre que um thread gerador de tabelas temporárias é encerrado, ocorre uma severa oscilação de desempenho, reduzindo o TPS em mais de 70%. Com o recurso DDL mais rápido ativado, essa redução no TPS cai para apenas 5%.
Efeito da otimização
O recurso DDL mais rápido é compatível com as versões 5.6, 5.7 e 8.0 do MySQL. No entanto, as operações DDL suportadas variam conforme a versão selecionada.
| Categoria | Operação DDL | MySQL 5.6 | MySQL 5.7 | MySQL 8.0 |
| DDL in-place | Para mais informações, consulte Operações DDL Online do MySQL 8.0 e Operações DDL Online do MySQL 5.7. | No | Yes | Yes |
| Gerenciamento de tablespace | Ativa ou desativa a criptografia do tablespace. | No | Yes | Yes |
| Libera ou exclui um tablespace. | No | Yes | Yes | |
| Descarta um tablespace. | Yes | Yes | Yes | |
| Exclusão de tabela | Libera ou exclui uma tabela. | Yes | Yes | Yes |
| Operação de undo | Libera ou exclui um undo tablespace. | No | No | Yes |
| Atualização de tabela | Atualiza uma tabela e suas páginas sujas (dirty pages). | Yes | Yes | Yes |
Defeitos corrigidos pelo DDL mais rápido
O recurso DDL mais rápido corrige os seguintes defeitos: