Todos os produtos
Search
Central de documentação

PolarDB:Tratar exceções de DDL

Última atualização: Jun 28, 2026

O PolarDB-X 1.0 distribui operações de linguagem de definição de dados (DDL) entre todos os shardings de tabela para execução paralela. Quando um comando DDL falha ou trava, use este guia para diagnosticar a causa e restaurar a consistência do schema.

Funcionamento do DDL no PolarDB-X 1.0

Cada comando DDL se propaga simultaneamente para todos os shardings de banco de dados. Esse modelo paralelo tem uma propriedade importante:

  • Uma falha em um sharding não afeta os demais. Cada sharding executa independentemente.

Como é possível tentar novamente operações DDL com falha e erros em shardings que já concluíram a operação não afetam os outros, basta garantir que todos os shardings de tabela compartilhem o mesmo schema ao final.

Use o comando CHECK TABLE para verificar se todos os shardings compartilham o mesmo schema após qualquer problema de DDL.

Tipos de falha de DDL

As falhas de DDL dividem-se em duas categorias:

Erros de execução — A instrução DDL falha em um ou mais shardings de banco de dados. Causas comuns incluem conflitos (a tabela ou coluna já existe) e espaço em disco insuficiente. Isso pode deixar os schemas dos shardings de tabela inconsistentes.

Operações de longa duração — A instrução DDL executa por um tempo anormalmente longo sem resposta. Isso ocorre quando um sharding demora muito para concluir a operação, cenário típico em operações Copy Table em tabelas grandes.

Determinar se uma operação DDL é rápida ou lenta

O MySQL executa DDL em dois modos:

  • In-Place — Modifica os metadados diretamente. É rápido e não copia dados.

  • Copy Table — Reconstrói a tabela inteira, incluindo todas as linhas de dados, logs e operações de buffer. É lento em tabelas grandes.

Verifique o valor de rows affected após a conclusão de uma operação DDL para identificar o modo utilizado:

Exemplo de operação

Saída

Modo

Alterar valor padrão da coluna

Query OK, 0 rows affected (0.07 sec)

In-Place

Adicionar um índice

Query OK, 0 rows affected (21.42 sec)

In-Place

Alterar tipo de dados da coluna

Query OK, 1671168 rows affected (1 min 35.54 sec)

Copy Table

Para obter uma referência completa sobre quais operações usam In-Place versus Copy Table, consulte Online DDL Operations na documentação do MySQL.

Teste antes de executar DDL em tabelas grandes:

  1. Clone o schema da tabela para gerar uma tabela de teste.

  2. Insira dados representativos.

  3. Execute a operação DDL na tabela clonada.

  4. Verifique o valor de rows affected. Um valor diferente de zero indica que a operação reconstruirá toda a tabela. Agende-a para horários de baixa demanda.

Diagnosticar e recuperar de falhas de DDL

Siga este fluxo de decisão para lidar com falhas de DDL:

Run CHECK TABLE
   |
Schema consistent? --> Yes --> Run SHOW CREATE TABLE
                                 |
                        Schema as expected? --> Yes --> Done (DDL succeeded)
                                             |
                                             No
                                             |
                          <-- <-- <-- <-- <--+
   |
   No
Run SHOW PROCESSLIST
   |
DDL still running? --> Yes --> Wait for completion --> Return to CHECK TABLE
   |
   No
Retry DDL
   |
Lock conflict error? --> Yes --> Run RELEASE DBLOCK --> Retry DDL
   |
   No
Return to SHOW PROCESSLIST

Etapa 1: Verificar a consistência do schema

Execute CHECK TABLE para confirmar se todos os shardings de tabela compartilham o mesmo schema:

mysql> check table `xxxx`;
Nota

Se o

CHECK TABLE

não retornar nenhuma saída no Data Management Service (DMS), execute-o pela linha de comando.

Um schema consistente retorna uma única linha com status OK:

+----------------------------+-------+----------+----------+
| TABLE                      | OP    | MSG_TYPE | MSG_TEXT |
+----------------------------+-------+----------+----------+
| TDDL5_APP.xxxx             | check | status   | OK       |
+----------------------------+-------+----------+----------+
1 row in set (0.05 sec)

Caso o resultado contenha mais de uma linha ou o status não seja OK, os shardings apresentam schemas inconsistentes. Prossiga para a etapa 2.

Etapa 2: Verificar o conteúdo do schema

Execute SHOW CREATE TABLE para conferir o schema real:

mysql> show create table `xxxx`;

Exemplo de saída:

+---------+------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                     |
+---------+------------------------------------------------------------------------------------------------------------------+
|  xxxx   | CREATE TABLE `xxxx` (
`id` int(11) NOT NULL DEFAULT '0',
`NAME` varchar(1024) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 3                      |
+---------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)

Se o schema corresponder ao esperado após a operação DDL, o DDL foi concluído com sucesso. Caso contrário, prossiga para a etapa 3.

Etapa 3: Verificar operações DDL em execução

Algumas operações DDL são lentas e não produzem saída imediata. Execute SHOW PROCESSLIST para visualizar todas as instruções SQL ativas:

mysql> SHOW PROCESSLIST WHERE COMMAND != 'Sleep';

Exemplo de saída:

+---------------+-----------+--------------------+-------------+---------+-----------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+-----------+---------------+-----------+
| ID            | USER      | DB                 | COMMAND     | TIME    | STATE                                                                 | INFO                                                                                                 | ROWS_SENT | ROWS_EXAMINED | ROWS_READ |
+---------------+-----------+--------------------+-------------+---------+-----------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+-----------+---------------+-----------+
| 0-0-352724126 | ifisibhk0 | test_123_wvvp_0000 | Query       |      15 | Sending data                                                          | /*DRDS /42.120.74.88/ac47e5a72801000/ */select `t_item`.`detail_url`,SUM(`t_item`.`price`) from `t_i |      NULL |          NULL |      NULL |
| 0-0-352864311 | cowxhthg0 | NULL               | Binlog Dump |      13 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL                                                                                                 |      NULL |          NULL |      NULL |
| 0-0-402714566 | ifisibhk0 | test_123_wvvp_0005 | Query       |      14 | Sending data                                                          | /*DRDS /42.120.74.88/ac47e5a72801000/ */select `t_item`.`detail_url`,`t_item`.`price` from `t_i      |      NULL |          NULL |      NULL |
| 0-0-402714795 | ifisibhk0 | test_123_wvvp_0005 | Alter       |     114 | Sending data                                                          | /*DRDS /42.120.74.88/ac47e5a72801000/ */ALTER TABLE `Persons` ADD `Birthday` date                    |      NULL |          NULL |      NULL |
......
+---------------+-----------+--------------------+-------------+---------+-----------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+-----------+---------------+-----------+
12 rows in set (0.03 sec)

Colunas essenciais para solução de problemas de DDL:

Coluna

O que observar

ID

ID do comando — use para cancelar uma operação específica

TIME

Segundos de execução do comando — valores altos indicam uma operação lenta

INFO

Instrução SQL completa — identifica a qual DDL lógico pertence um comando de sharding

Ao encontrar uma operação DDL em execução há muito tempo, cancele-a com:

KILL '0-0-402714795';
Nota

Uma única instrução DDL lógica no PolarDB-X 1.0 corresponde a vários comandos de sharding de banco de dados. Para interromper uma operação DDL lógica, talvez seja necessário cancelar múltiplos comandos. Use a coluna INFO para identificar quais comandos pertencem à mesma instrução lógica.

Após o cancelamento, retorne à etapa 1 para verificar a consistência do schema.

Etapa 4: Tentar novamente a operação DDL

Se nenhum DDL estiver em execução e o schema ainda estiver inconsistente, tente executar novamente a operação DDL no PolarDB-X 1.0. Erros relatados em shardings onde a operação já foi concluída com sucesso não afetam a reexecução nos demais shardings.

Em caso de sucesso na nova tentativa, retorne à etapa 1 para verificar a consistência.

Se surgir um erro de Lock conflict, prossiga para a etapa 5.

Etapa 5: Liberar o bloqueio de DDL

Causa do conflito de bloqueio

O PolarDB-X 1.0 adquire um bloqueio de DDL antes de executar qualquer operação desse tipo e o libera ao concluir. Se você cancelar uma operação DDL com KILL antes da conclusão, o bloqueio pode não ser liberado automaticamente. Qualquer tentativa subsequente de DDL na mesma tabela falhará com:

Lock conflict , maybe last DDL is still running

Liberar o bloqueio

Execute o seguinte comando para liberar o bloqueio de DDL:

RELEASE DBLOCK;

Após liberar o bloqueio, tente novamente a operação DDL (etapa 4). Para minimizar riscos, execute o DDL em horários de baixa demanda ou quando o serviço estiver parado.

Perguntas frequentes

Por que o DMS ou outro cliente não mostra o schema atualizado?

O PolarDB-X 1.0 mantém um banco de dados sombra no RDS, localizado no sharding de banco de dados 0. Esse banco de dados sombra tem o mesmo nome do banco de dados lógico do PolarDB-X 1.0 e armazena todos os metadados do banco de dados lógico, incluindo schemas. Clientes como o DMS leem o schema desse banco de dados sombra, e não diretamente dos shardings.

Se a operação DDL atualizou os schemas dos shardings, mas não o banco de dados sombra, os clientes exibirão o schema antigo. Para corrigir isso, conecte-se diretamente ao banco de dados sombra e execute a mesma operação DDL na tabela.

Nota

O comando

CHECK TABLE

não verifica se o schema do banco de dados sombra está consistente com o schema do banco de dados lógico do PolarDB-X 1.0. Se o DMS mostrar um schema inesperado após o

CHECK TABLE

retornar

OK

, é provável que o banco de dados sombra esteja dessincronizado.

Como lidar com códigos de erro de DDL como TDDL-4500 ERR_PARSER?

Consulte Códigos de erro para obter a lista completa de códigos de erro do PolarDB-X 1.0 e suas soluções.