O EXPLAIN DDL permite visualizar as características de execução de uma instrução ALTER TABLE antes da execução. Esse recurso informa qual algoritmo o mecanismo seleciona, se a operação exige reconstrução completa da tabela, se há suporte para DML simultâneo e se transações não confirmadas podem bloquear o processo. Use essas informações para avaliar o impacto nos negócios e definir o melhor momento e método para executar o DDL.
Versões suportadas
O EXPLAIN DDL está disponível nas seguintes versões:
PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.49 ou posterior
PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.2.27 ou posterior
Limitações
Suporte apenas para tabelas com o mecanismo de armazenamento InnoDB.
Nenhuma modificação de dados reais.
Execução permitida no nó primário e nos nós somente leitura. O campo
Possible blocked MDLsexibe possíveis conflitos de bloqueio apenas no nó atual.
Ative o EXPLAIN DDL
O EXPLAIN DDL vem ativado por padrão. Use os parâmetros abaixo para controlar esse recurso. Para instruções de configuração, consulte Configurar parâmetros de cluster e de nó.
|
Parâmetro |
Nível |
Descrição |
Padrão |
|
|
Global |
Ativa ou desativa o EXPLAIN DDL. Valores válidos: |
|
|
|
Global |
Número máximo de threads com potencial de bloqueio MDL a coletar. Valores válidos: 1–512. |
|
Sintaxe
{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...
Campos de saída
Quatro campos determinam diretamente o impacto nos negócios: Algorithm, Metadata Only, Rebuilt Table e Concurrent DML. Use o campo Possible blocked MDLs para detectar conflitos de bloqueio ativos antes da execução.
|
Campo |
Descrição |
Valores |
|
|
Código de erro. O valor |
|
|
|
Algoritmo usado pelo mecanismo. INSTANT é o mais eficiente; COPY é o menos eficiente e bloqueia gravações. |
|
|
|
Indica se a operação modifica apenas metadados, sem alterar os dados da tabela. Operações somente de metadados são concluídas em segundos, independentemente do tamanho da tabela. |
|
|
|
Indica se a operação exige reconstrução completa da tabela. Reconstruir tabelas grandes consome bastante tempo. |
|
|
|
Indica se a operação suporta DDL paralelo para aceleração. |
|
|
|
Quantidade de threads usadas pela operação DDL. O valor |
|
|
|
Indica se operações de leitura e gravação são permitidas durante a execução do DDL. |
|
|
|
IDs de processo das conexões com transações não confirmadas que podem bloquear o DDL. |
IDs de processo separados por vírgula ou vazio |
|
|
Mensagem de erro correspondente ao campo |
Uma string |
|
|
Sugestões de otimização, como ativar DDL paralelo ou resolver conflitos de bloqueio. |
Uma string |
|
|
Instrução DDL analisada. |
Uma instrução DDL |
Classificação de eficiência dos algoritmos
Os três algoritmos formam uma hierarquia de eficiência. O EXPLAIN DDL relata o algoritmo realmente selecionado pelo mecanismo, correspondente ao mais eficiente suportado pela operação:
|
Algoritmo |
Reconstrução de tabela |
DML simultâneo |
Eficiência |
|
|
Não |
Sim |
Mais alta — conclusão em segundos |
|
|
Depende da operação |
Sim |
Média — pode levar minutos em tabelas grandes |
|
|
Sim |
Não |
Mais baixa — bloqueia gravações; evite em horários de pico |
Referência de operações
Use esta tabela para estimar o impacto nos negócios antes de executar o EXPLAIN DDL em uma operação específica. A tabela reflete o comportamento típico; use o EXPLAIN DDL para confirmar o resultado real em seu ambiente.
|
Operação |
Algoritmo |
Somente metadados |
Reconstrução de tabela |
DML simultâneo |
Impacto típico |
|
Adicionar uma coluna |
INSTANT |
Sim |
Não |
Sim |
Conclusão em segundos; impacto mínimo |
|
Renomear uma tabela |
INPLACE |
Sim |
Não |
Sim |
Conclusão rápida; impacto mínimo |
|
Adicionar um índice secundário |
INPLACE |
Não |
Não |
Sim |
Tempo variável conforme o tamanho da tabela; baixo impacto |
|
Reconstruir uma tabela |
INPLACE |
Não |
Sim |
Sim |
Consumo significativo de recursos; agende fora do horário de pico |
|
Modifique o tipo de uma coluna |
COPY |
Não |
Sim |
Não |
Bloqueio de gravações; agende fora do horário de pico |
Exemplos
Verificar características de execução
Os exemplos a seguir demonstram como usar o EXPLAIN DDL para avaliar se uma operação DDL afeta a disponibilidade do negócio.
Todos os exemplos usam a mesma tabela de teste:
SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` char(1) DEFAULT NULL,
`c` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Adicionar uma coluna
EXPLAIN ALTER TABLE t1 ADD COLUMN d INT;
*************************** 1. row ***************************
Error No: 0
Algorithm: INSTANT
Metadata Only: Yes
Rebuilt table: No
Parallel Support: Not Need
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info:
Statement: EXPLAIN ALTER TABLE t1 ADD COLUMN d int
1 row in set (0.00 sec)
O algoritmo INSTANT modifica apenas metadados, sem reconstruir a tabela, e permite DML simultâneo. Essa operação é concluída em segundos com impacto mínimo nos negócios.
Renomear uma tabela
EXPLAIN ALTER TABLE t1 rename t1_rn;
*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: Yes
Rebuilt table: No
Parallel Support: Not Need
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info:
Statement: EXPLAIN ALTER TABLE t1 rename t1_rn
1 row in set (0.01 sec)
O algoritmo INPLACE modifica apenas metadados, sem reconstruir a tabela, e permite DML simultâneo. Essa operação tem impacto mínimo nos negócios.
Modifique o tipo de uma coluna
EXPLAIN ALTER TABLE t1 modify COLUMN a char(1);
*************************** 1. row ***************************
Error No: 0
Algorithm: COPY
Metadata Only: No
Rebuilt table: Yes
Parallel Support: No
Parallel Degree: 1
Concurrent DML: No
Possible blocked MDLs:
Error Msg:
Suggest Info:
Statement: EXPLAIN ALTER TABLE t1 modify COLUMN a char(1)
1 row in set (0.01 sec)
O algoritmo COPY exige reconstrução completa da tabela e bloqueia DML simultâneo. Essa operação causa impacto significativo nos negócios — agende-a fora do horário de pico.
Reconstruir uma tabela
EXPLAIN ALTER TABLE t1 engine= innodb;
*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: Yes
Parallel Support: Yes But Not Enable
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
Statement: EXPLAIN ALTER TABLE t1 engine= innodb
O algoritmo INPLACE exige reconstrução completa da tabela, mas permite DML simultâneo. Embora a operação não bloqueie leituras ou gravações, reconstruir uma tabela grande consome recursos significativos — agende essa tarefa fora do horário de pico.
O campo Suggest Info indica que o DDL paralelo pode acelerar esta operação. Consulte Verificar suporte a DDL paralelo para mais detalhes.
Verificar suporte a DDL paralelo
O PolarDB for MySQL suporta DDL paralelo para acelerar operações DDL. Use os campos Parallel Support e Parallel Degree para determinar se uma operação pode se beneficiar do DDL paralelo.
Se
Parallel SupportforYes, But Not Enabled, a operação suporta DDL paralelo, mas o recurso não está ativado no cluster. O campoSuggest Infoexibe:This DDL operation could use Parallel DDL to speed up.Para ativar o DDL paralelo, consulte DDL paralelo.Se
Parallel SupportforYes, o recurso está ativado e em uso. O EXPLAIN DDL também recomenda um grau ideal de paralelismo com base na carga de trabalho atual do cluster. O campoSuggest Infoexibe:This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.Ajuste o parâmetroinnodb_polar_parallel_ddl_threadsconforme recomendado para melhorar o desempenho.
Exemplo: DDL paralelo desativado
Verifique se o DDL paralelo está ativado:
MySQL [test]> SHOW variables LIKE "%parallel_ddl_threads%";
+----------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------+-------+
| innodb_polar_innovate_default_parallel_ddl_threads | 1 |
| innodb_polar_parallel_ddl_threads | 1 |
+----------------------------------------------------+-------+
2 rows in set (0.03 sec)
O DDL paralelo não está ativado. Execute o EXPLAIN na operação de adição de índice secundário:
EXPLAIN ALTER TABLE t1 ADD index k_a(a);
*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: No
Parallel Support: Yes But Not Enable
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
Statement: EXPLAIN ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)
O resultado Parallel Support: Yes But Not Enabled indica que a operação pode usar DDL paralelo, mas o recurso não está ativo. Ative o DDL paralelo para acelerá-la.
Exemplo: DDL paralelo ativado
Defina o grau de paralelismo como 2:
MySQL [test]> SET innodb_polar_parallel_ddl_threads = 2;
Query OK, 0 rows affected (0.00 sec)
Execute o EXPLAIN na mesma operação de adição de índice secundário:
EXPLAIN ALTER TABLE t1 ADD index k_a(a);
*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: No
Parallel Support: Yes
Parallel Degree: 2
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info: 1. This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.
Statement: explain ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)
Os valores Parallel Support: Yes e Parallel Degree: 2 confirmam que a operação usa dois threads paralelos. Como a carga de trabalho atual do cluster é baixa, o campo Suggest Info recomenda aumentar o grau de paralelismo para 8 visando melhor desempenho.
Detectar bloqueios de MDL
Transações não confirmadas que mantêm um Metadata Lock (MDL) na mesma tabela podem bloquear operações DDL. Em casos extremos, bloqueios de MDL não detectados causam acúmulo de conexões ativas e instabilidade no cluster. Use o campo Possible blocked MDLs para identificar conexões bloqueadoras antes de executar o DDL.
Quando existem bloqueios, o campo Possible blocked MDLs lista os IDs de processo das conexões com transações não confirmadas. Encerre-as com KILL ou KILL QUERY para desbloquear o DDL.
Exemplo: detecção de bloqueio de MDL
Na conexão 1, inicie uma transação em t1 sem confirmá-la:
MySQL [test]> begin;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> select * from t1;
Empty set (0.00 sec)
Na conexão 2, execute o EXPLAIN DDL em t1:
EXPLAIN ALTER TABLE t1 engine= innodb;
*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: Yes
Parallel Support: Yes But Not Enable
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs: 18
Error Msg:
Suggest Info: 1. This DDL operation may be blocked by the threads listed under 'Possible blocked MDLs'.
2. This DDL operation could use Parallel DDL to speed up.
Statement: EXPLAIN ALTER TABLE t1 engine= innodb
O resultado Possible blocked MDLs: 18 identifica que a conexão 18 possui uma transação não confirmada que bloqueará este DDL. Execute KILL 18 ou KILL QUERY 18 para encerrá-la antes de prosseguir.