Todos os produtos
Search
Central de documentação

Data Management:Alteração de schema sem bloqueio

Última atualização: Jun 27, 2026

As alterações DDL sem bloqueio evitam o travamento de tabelas durante mudanças de schema, prevenindo interrupções nos negócios e atrasos de replicação causados por operações DDL online nativas.

Contexto

Ao alterar o schema de uma tabela grande, é necessário considerar o risco de bloqueios de tabela impedirem operações de escrita.

  • No MySQL 5.5 e em versões anteriores, o DDL oferece suporte a dois algoritmos de execução: Table-Copy e In-Place.

    • Table-Copy: Copia os dados para uma tabela temporária, bloqueando a tabela source e impedindo escritas até que a alteração seja concluída.

    • In-Place (disponível desde o MySQL 5.5): Permite operações de leitura e escrita durante a execução, mas suporta apenas operações relacionadas a índices.

  • O MySQL 5.6 e versões posteriores também introduziram o Innodb-OnlineDDL. Para obter mais informações sobre o Innodb-OnlineDDL, consulte Innodb-OnlineDDL.

    O Innodb-OnlineDDL abrange uma ampla variedade de tipos de DDL, como adicionar ou excluir colunas, renomear colunas e adicionar ou modificar índices. No entanto, ele não suporta alguns tipos comuns, como modificar tipos de coluna, alterar comprimentos de coluna ou mudar conjuntos de caracteres.

Casos de uso

  • Alterar o schema de uma tabela de banco de dados.

  • Modificar o conjunto de caracteres e a collation de uma tabela, ou ajustar seu fuso horário.

  • Evitar bloqueios de tabela decorrentes de operações OPTIMIZE TABLE que recuperam espaço e reduzem a taxa de fragmentação. Para mais detalhes, veja Desfragmentar espaço usando alteração de schema sem bloqueio.

Tipos de banco de dados suportados

RDS MySQL, PolarDB for MySQL, MyBase for MySQL e outros bancos de dados compatíveis com MySQL.

Recursos

  • O recurso de alteração de schema sem bloqueio do DMS permite controlar a velocidade de execução, ajudando a prevenir atrasos de replicação e minimizando o impacto no desempenho do banco de dados. Ele também suporta alterações nas quais o DDL online nativo normalmente bloquearia a tabela.

  • Diferentemente do pt-online-schema-change e do OSC, o recurso de alteração de schema sem bloqueio do DMS não depende de triggers. Ele é executado de forma assíncrona, com impacto mínimo no banco de dados, e pode ser interrompido com segurança a qualquer momento.

  • Este recurso possui alta compatibilidade com o DTS e não interrompe links de replicação do DTS no nível de tabela.

    Nota

    O link de replicação do DTS deve ter sido reiniciado após 14 de fevereiro de 2020.

  • A tabela a seguir compara as capacidades nativas de DDL online do MySQL com o recurso de alteração de schema sem bloqueio do DMS:

    Operação

    MySQL 5.5 e anteriores

    MySQL 5.6 e posteriores

    Alteração de schema sem bloqueio do DMS

    Adicionar uma coluna

    ❌

    ✅

    ✅

    Excluir uma coluna

    ❌

    ✅

    ✅

    Renomear uma coluna

    ❌

    ✅

    ✅

    Adicionar um índice

    ❌

    ✅

    ✅

    Modificar um índice

    ❌

    ✅

    ✅

    Desfragmentar uma tabela

    ❌

    ✅

    ✅

    Modificar o tipo de uma coluna

    ❌

    ❌

    ✅

    Modificar o comprimento de uma coluna

    ❌

    ❌

    ✅

    Modificar um conjunto de caracteres

    ❌

    ❌

    ✅

    Converter um conjunto de caracteres

    ❌

    ❌

    ✅

    Ajustar um fuso horário

    ❌

    ❌

    ✅

    Mitigar ou eliminar atraso de réplica de leitura

    ❌

    ❌

    ✅

    Adicionar uma chave única

    ✅

    ✅

    ✅

    Adicionar uma restrição

    ✅

    ✅

    ✅

    Importante

    Ao adicionar uma chave única ou uma restrição usando o recurso de alteração de schema sem bloqueio do DMS, observe que quaisquer dados na tabela source que violem a nova chave única ou restrição são descartados automaticamente pelo MySQL durante o processo de cópia para a tabela temporária.

Para comparar o recurso de alteração de schema sem bloqueio do DMS com outras soluções, consulte Comparação de soluções de alteração de schema sem bloqueio.

Observações de uso

  • O DMS suporta alterações de schema para tabelas particionadas existentes.

  • É possível usar um único ticket de alteração de schema sem bloqueio para modificar várias tabelas dentro do mesmo banco de dados.

    Ao configurar as instruções SQL para o ticket, separe as instruções de tabelas diferentes com ponto e vírgula (;).

  • Não é possível atualizar a chave primária ou única de uma tabela durante uma alteração de schema sem bloqueio se ela for a única chave da tabela. Tentar essa operação causará falha na tarefa.

Como funciona

Ao enviar um ticket de alteração de schema sem bloqueio, o DMS executa automaticamente as etapas a seguir para concluir a mudança sem bloquear a tabela:

  1. Crie uma tabela temporária. O DMS cria uma nova tabela que espelha o schema da tabela source.

    A sintaxe SQL é CREATE TABLE tmp_table_name LIKE table_name.

  2. Altere o schema da tabela temporária. O DMS aplica as alterações DDL solicitadas à tabela temporária.

    A sintaxe SQL é ALTER TABLE tmp_table_name XXXX.

  3. Copie todos os dados. O DMS copia todos os dados da tabela source para a tabela temporária.

    A sintaxe SQL é INSERT IGNORE INTO tmp_table_name (SELECT %s FROM table_name FORCE INDEX (%s) WHERE XXX LOCK IN SHARE MODE).

  4. Analise o binlog para sincronizar dados incrementais. O DMS aplica alterações contínuas do binlog da tabela source à tabela temporária.

    A sintaxe SQL é UPDATE/INSERT/DELETE tmp_table_name.

  5. Troque as tabelas. O DMS renomeia atomicamente a tabela source para um nome de backup e a tabela temporária para o nome da tabela original.

    A sintaxe SQL é RENAME TABLE table_name to old_tmp_table_name, tmp_table_name to table_name.

Nota

tmp_table_name é um exemplo de nome de tabela temporária. Você encontra o nome específico da tabela temporária na área de progresso da tarefa de alteração de schema sem bloqueio. Para mais informações, consulte Visualize o progresso da alteração de schema sem bloqueio.

O formato dos nomes das tabelas temporárias é o seguinte:

  • Tabela de dados: tp_{change_ID}_ogt_{original_table_name}, tp_{change_ID}_g_{original_table_name}

  • Tabela de heartbeat: tp_{change_ID}_ogl_{original_table_name}, tp_{change_ID}_l_{original_table_name}

  • Tabela auxiliar antes do switchover e tabela original após o switchover: tp_{change_ID}_del_{original_table_name}, tp_{change_ID}_d_{original_table_name}

  • Detecção de bloqueio de tabela: tpa_xxx_xxx

Nota

O ID de alteração é o ID de execução do mecanismo interno do DMS. Não corresponde ao ID do ticket ou ao ID da tarefa.

Documentos relacionados

Perguntas frequentes

  • P: Uma alteração de schema sem bloqueio afeta meus serviços?

    R: Normalmente, uma alteração de schema sem bloqueio não afeta seus serviços. No entanto, o processo de cópia de dados pode impactar o desempenho da instância.

  • P: Recebi um erro ao tentar adicionar um índice com CREATE_INDEX em um ticket de alteração de schema sem bloqueio. O DMS não suporta a adição de índices?

    R: Sim, o DMS suporta a adição de índices. Execute a seguinte instrução ALTER TABLE para adicionar um índice:

    ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;
  • P: Recebi um erro ao tentar renomear uma coluna com rename column em um ticket de alteração de schema sem bloqueio. O DMS não suporta a renomeação de colunas?

    R: Sim, o DMS suporta a renomeação de colunas. Execute a seguinte instrução ALTER TABLE para renomear uma coluna:

    ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;