O PolarDB for MySQL suporta operações DDL em seis categorias: índices, chaves primárias, colunas, tabelas, chaves estrangeiras, colunas geradas e partições. Antes de executar qualquer alteração de schema em produção, entenda o comportamento de cada operação: se ela bloqueia a tabela, aciona uma reconstrução completa ou é concluída em segundos modificando apenas metadados.
Riscos associados a operações DDL
Uma única instrução ALTER TABLE pode causar os seguintes efeitos:
Manter um bloqueio exclusivo na tabela durante toda a execução, impedindo leituras e gravações
Acionar uma reconstrução completa da tabela, processo que pode levar horas em tabelas grandes
Provocar filas de conexão: consultas subsequentes acumulam-se atrás do DDL, resultando em timeouts ou interrupções na aplicação
Elevar abruptamente o uso de IOPS e CPU, afetando outras cargas de trabalho no mesmo cluster
O PolarDB for MySQL recebeu melhorias significativas de desempenho e comportamento de bloqueio em operações DDL ao longo das versões. Este guia ajuda a identificar o perfil de risco de cada operação antes da execução.
Algoritmos de execução de DDL
O PolarDB seleciona automaticamente o algoritmo mais eficiente nesta ordem: INSTANT → INPLACE → COPY. Entender cada algoritmo permite prever o impacto de uma operação DDL.
|
Algoritmo |
Funcionamento |
Impacto |
|
INSTANT |
Modifica apenas metadados no dicionário de dados. Nenhum dado é copiado ou reconstruído. |
Concluído em segundos, independentemente do tamanho da tabela. Permite leituras e gravações simultâneas. |
|
INPLACE |
Reconstrói ou reorganiza dados dentro do mecanismo de armazenamento. A maioria das operações INPLACE permite leituras e gravações simultâneas. Algumas operações INPLACE (por exemplo, |
Impacto mínimo. Geralmente permite DML simultâneo. |
|
COPY |
Copia todos os dados da tabela original para uma nova tabela. Mantém um bloqueio shared-no-write (SNW) durante todo o processo. |
Bloqueia todas as gravações durante toda a execução. Operações de leitura continuam permitidas. |
Operações DDL que permitem leituras e gravações simultâneas durante a execução são chamadas de Online DDL. O Online DDL minimiza o impacto em ambientes de produção.
Controle a seleção de algoritmos com cláusulas ALTER TABLE
Para substituir a seleção automática de algoritmo ou impor um comportamento específico de bloqueio, use as cláusulas ALGORITHM e LOCK no comando ALTER TABLE:
Cláusula ALGORITHM — força um algoritmo específico. Se a operação DDL não suportar o algoritmo especificado, o sistema retornará um erro imediatamente. Valores válidos: DEFAULT, INSTANT, INPLACE, COPY.
Cláusula LOCK — controla o acesso simultâneo durante a execução do DDL. Valores válidos:
|
Valor |
Comportamento |
|
|
Concede o nível máximo de acesso simultâneo suportado pelo tipo de DDL. |
|
|
Exige leituras e gravações simultâneas. Retorna erro se não houver suporte. |
|
|
Permite leituras simultâneas, mas bloqueia gravações. Retorna erro se não houver suporte para leituras simultâneas. |
|
|
Bloqueia todas as leituras e gravações simultâneas. |
Especificar LOCK impede que a tabela fique inacessível durante a execução: se o comportamento real de bloqueio não atender ao requisito especificado, a operação será interrompida imediatamente.
O PolarDB suporta DDL paralelo para operações em tabelas grandes, como criação de índices e reconstrução de tabelas. O DDL paralelo utiliza múltiplas threads e pode aumentar a velocidade de execução em até 15–20 vezes em comparação à execução single-thread. Para mais informações, consulte DDL paralelo .
Fale conosco
Se tiver dúvidas sobre operações DDL, entre em contato com o suporte técnico.
Visualize o comportamento do DDL antes da execução
Como o comportamento do DDL pode ser afetado pela estrutura da tabela, configurações de parâmetros e recursos ativados, o comportamento real pode diferir das tabelas apresentadas neste guia. Use EXPLAIN DDL para visualizar exatamente como uma instrução DDL será executada antes de rodá-la.
{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...
O comando EXPLAIN DDL retorna:
Se o DDL pode ser executado com sucesso
O algoritmo que será utilizado (INSTANT, INPLACE ou COPY)
Se haverá reconstrução completa da tabela
Se o DML simultâneo é permitido durante a execução
Se a execução será bloqueada por transações não confirmadas
Se há suporte para aceleração via DDL paralelo e, em caso afirmativo, o grau de paralelismo
Para mais informações, consulte EXPLAIN DDL.
Comportamento do DDL por operação
As tabelas abaixo mostram o comportamento do DDL nas diferentes versões do PolarDB for MySQL. Quatro colunas descrevem o comportamento de cada operação:
DML simultâneo — indica se leituras e gravações simultâneas são permitidas durante a execução
Reconstrói tabela — indica se a operação aciona uma reconstrução completa da tabela (processo demorado para tabelas grandes)
Apenas metadados — indica se a operação modifica apenas metadados (concluída em segundos)
DDL paralelo — indica se a operação suporta aceleração via DDL paralelo
Operações de índice
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Criar um índice secundário |
Sim |
Não |
Não |
8.0.2 / 8.0.1 / 5,7: Suportado; 5,6: Não suportado |
|
Excluir um índice secundário |
Sim |
Não |
Sim |
Não aplicável |
|
Renomear um índice secundário |
Sim |
Não |
Sim |
Não aplicável |
|
Adicionar um índice full-text (FULLTEXT) |
Não |
Não¹ |
Não |
Não suportado |
|
Adicionar um índice espacial (SPATIAL) |
Não |
Não |
Não |
Não suportado |
¹ Ao adicionar o primeiro índice full-text a uma tabela, uma reconstrução adicional da tabela é acionada se não existir uma coluna FTS_DOC_ID definida pelo usuário.
Operações de chave primária
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma chave primária |
Sim¹ |
Sim |
Não |
8.0.2 / 8.0.1 / 5,7: Suportado; 5,6: Não suportado |
|
Excluir uma chave primária |
Não |
Sim |
Não |
Não suportado |
|
Excluir a chave primária original e adicionar uma nova |
Sim¹ |
Sim |
Não |
8.0.2 / 8.0.1 / 5,7: Suportado; 5,6: Não suportado |
¹ O DML simultâneo é permitido apenas quando o parâmetro de cluster sql_mode inclui STRICT_TRANS_TABLES ou STRICT_ALL_TABLES.
Operações de coluna
As tabelas abaixo listam o comportamento específico de cada versão. Consulte a seção Limitações e exceções após as tabelas para restrições importantes sobre adição instantânea de colunas, extensão de comprimento VARCHAR e conversão de conjunto de caracteres.
PolarDB for MySQL 8.0.2
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma coluna |
Sim |
Não¹ |
Sim¹ |
Suportado¹ |
|
Excluir uma coluna |
Sim |
Sim |
Não |
Suportado |
|
Renomear uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Reordenar colunas |
Sim |
Sim |
Não |
Suportado |
|
Definir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o comentário de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o tipo de uma coluna |
Não |
Sim |
Não |
Não suportado |
|
Estender o comprimento VARCHAR |
Sim² |
Não |
Sim |
Não aplicável |
|
Alterar o conjunto de caracteres de UTF8mb3 para UTF8mb4 |
Não |
Não³ |
Sim³ |
Não suportado |
|
Excluir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o valor de autoincremento |
Sim |
Não |
Sim |
Não aplicável |
|
Alterar uma coluna para NULL |
Sim |
Sim |
Não |
Suportado |
|
Alterar uma coluna para NOT NULL |
Não |
Sim |
Não |
Não suportado |
|
Modificar a definição de uma coluna ENUM/SET |
Sim |
Não |
Sim⁴ |
Não aplicável |
PolarDB for MySQL 8.0.1
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma coluna |
Sim |
Não¹ |
Sim¹ |
Suportado¹ |
|
Excluir uma coluna |
Sim |
Sim |
Não |
Suportado |
|
Renomear uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Reordenar colunas |
Sim |
Sim |
Não |
Suportado |
|
Definir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o comentário de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o tipo de uma coluna |
Não |
Sim |
Não |
Não suportado |
|
Estender o comprimento VARCHAR |
Sim² |
Não |
Sim |
Não aplicável |
|
Alterar o conjunto de caracteres de UTF8mb3 para UTF8mb4 |
Não |
Não³ |
Sim³ |
Não suportado |
|
Excluir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o valor de autoincremento |
Sim |
Não |
Sim |
Não aplicável |
|
Alterar uma coluna para NULL |
Sim |
Sim |
Não |
Suportado |
|
Alterar uma coluna para NOT NULL |
Não |
Sim |
Não |
Não suportado |
|
Modificar a definição de uma coluna ENUM/SET |
Sim |
Não |
Sim⁴ |
Não aplicável |
PolarDB for MySQL 5,7
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma coluna |
Sim |
Não¹ |
Sim¹ |
Suportado¹ |
|
Excluir uma coluna |
Sim |
Sim |
Não |
Suportado |
|
Renomear uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Reordenar colunas |
Sim |
Sim |
Não |
Suportado |
|
Definir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o comentário de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o tipo de uma coluna |
Não |
Sim |
Não |
Não suportado |
|
Estender o comprimento VARCHAR |
Sim² |
Não |
Sim |
Não aplicável |
|
Alterar o conjunto de caracteres de UTF8mb3 para UTF8mb4 |
Não |
Sim |
Não |
Não suportado |
|
Excluir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o valor de autoincremento |
Sim |
Não |
Sim |
Não aplicável |
|
Alterar uma coluna para NULL |
Sim |
Sim |
Não |
Suportado |
|
Alterar uma coluna para NOT NULL |
Não |
Sim |
Não |
Não suportado |
|
Modificar a definição de uma coluna ENUM/SET |
Sim |
Não |
Sim³ |
Não aplicável |
PolarDB for MySQL 5,6
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma coluna |
Sim |
Não¹ |
Sim¹ |
Não suportado |
|
Excluir uma coluna |
Sim |
Sim |
Não |
Não suportado |
|
Renomear uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Reordenar colunas |
Sim |
Sim |
Não |
Não suportado |
|
Definir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o comentário de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o tipo de uma coluna |
Não |
Sim |
Não |
Não suportado |
|
Estender o comprimento VARCHAR |
Não |
Sim |
Não |
Não suportado |
|
Alterar o conjunto de caracteres de UTF8mb3 para UTF8mb4 |
Não |
Sim |
Não |
Não suportado |
|
Excluir o valor padrão de uma coluna |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o valor de autoincremento |
Sim |
Não |
Sim |
Não aplicável |
|
Alterar uma coluna para NULL |
Sim |
Sim |
Não |
Não suportado |
|
Alterar uma coluna para NOT NULL |
Não |
Sim |
Não |
Não suportado |
|
Modificar a definição de uma coluna ENUM/SET |
Sim |
Não |
Sim² |
Não aplicável |
Limitações e exceções
Adição instantânea de coluna
Quando o recurso de adição instantânea de coluna está disponível, adicionar uma coluna modifica apenas metadados e é concluído em segundos, independentemente do tamanho da tabela. O comportamento varia conforme a versão:
|
Versão |
Como ativar |
Observações adicionais |
|
8.0.2 |
Ativado por padrão |
— |
|
8.0.1 |
Ativado por padrão |
Se a tabela possuir um índice columnstore, defina |
|
5,7 |
Defina |
— |
|
5,6 |
Defina |
Atualmente em canary release. Para ativar, acesse o Quota Center, pesquise pelo ID de cota |
Todas as versões compartilham as seguintes restrições:
Colunas só podem ser adicionadas ao final da tabela.
Se a tabela não tiver chave primária, defina
implicit_primary_keycomo OFF para evitar falha na operação devido a uma chave primária implícita no final da tabela.Não suportado em tabelas compactadas (
ROW_FORMAT=COMPRESSED), tabelas com índices full-text ou tabelas temporárias.
Quando a adição instantânea de coluna não é suportada, o sistema recorre ao algoritmo INPLACE, acionando uma reconstrução da tabela. Leituras e gravações simultâneas ainda são permitidas durante a reconstrução, e o DDL paralelo pode ser usado para acelerar o processo.
Para mais informações, consulte adição instantânea de coluna.
Extensão de comprimento VARCHAR
O PolarDB armazena o comprimento de uma coluna VARCHAR usando 1 byte para colunas de até 255 bytes e 2 bytes para colunas de 256 bytes ou mais. Estender uma coluna VARCHAR modifica apenas metadados quando a extensão permanece na mesma faixa de comprimento (0–255 bytes ou de 256 bytes para um tamanho maior). Se a extensão cruzar o limite — de menos de 256 bytes para 256 bytes ou mais — o PolarDB usa o algoritmo COPY por padrão, bloqueando a tabela durante toda a duração. Operações de gravação são bloqueadas; leituras continuam permitidas.
Para verificar se uma modificação VARCHAR se qualifica para uma alteração apenas de metadados, especifique ALGORITHM=INPLACE. Se o algoritmo INPLACE não for suportado, o sistema retornará um erro imediatamente em vez de recorrer ao COPY:
ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256);
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
Para evitar essa situação no futuro, defina o comprimento máximo das colunas VARCHAR como 256 bytes ou mais ao projetar seu schema.
Alteração de conjunto de caracteres de UTF8mb3 para UTF8mb4
Na versão 8.0.2, alterar o conjunto de caracteres de uma coluna de UTF8mb3 para UTF8mb4 modifica apenas metadados quando todas as condições a seguir são atendidas:
O tipo da coluna é CHAR, VARCHAR, ENUM ou TEXT.
Não existe índice na coluna modificada.
O comprimento máximo de armazenamento da coluna está na mesma faixa antes e depois da conversão (ambos menores que 256 bytes ou ambos com 256 bytes ou mais).
Na versão 8.0.1, aplicam-se as mesmas condições e, adicionalmente, o parâmetro loose_innodb_support_instant_modify_charset deve estar definido como ON.
Nas versões 5,7 e 5,6, o algoritmo COPY é sempre utilizado, reconstruindo a tabela durante toda a duração.
Se as condições não forem atendidas nas versões 8.0.2 ou 8.0.1, o algoritmo COPY será usado. Para confirmar se uma alteração se qualifica como operação apenas de metadados, especifique ALGORITHM=INPLACE. Se não houver suporte, o sistema retornará um erro imediatamente:
ALTER TABLE test MODIFY COLUMN b char(1) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INPLACE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
Alterações na definição de colunas ENUM/SET
Modificar uma coluna ENUM ou SET altera apenas metadados quando o tamanho de armazenamento do tipo de dados não muda e você acrescenta elementos ao final do ENUM ou SET. Qualquer outra alteração exige o algoritmo COPY para reconstruir a tabela.
Operações de tabela
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Modificar ROW_FORMAT |
Sim |
Sim |
Não |
8.0.2 / 8.0.1 / 5,7: Suportado; 5,6: Não suportado |
|
Modificar KEY_BLOCK_SIZE |
Sim |
Sim |
Não |
8.0.2 / 8.0.1 / 5,7: Suportado; 5,6: Não suportado |
|
Definir estatísticas persistentes |
Sim |
Não |
Sim |
Não aplicável |
|
Declarar um conjunto de caracteres |
Sim |
Não |
Sim |
Não aplicável |
|
Converter um conjunto de caracteres |
Não |
Sim |
Não |
Não suportado |
|
Otimizar uma tabela¹ |
Sim |
Sim |
Não |
8.0.2 / 8.0.1 / 5,7: Suportado; 5,6: Não suportado |
|
Reconstruir uma tabela |
Sim |
Sim |
Não |
8.0.2 / 8.0.1 / 5,7: Suportado; 5,6: Não suportado |
|
Renomear uma tabela |
Sim |
Não |
Sim |
Não aplicável |
|
Modificar o comentário de uma tabela |
Sim |
Não |
Sim |
Não aplicável |
¹ Ao desfragmentar uma tabela com ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE, o algoritmo INPLACE não é suportado para tabelas com índices full-text.
Operações de coluna gerada
O PolarDB for MySQL 5,6 não suporta colunas geradas.
As versões 8.0.2, 8.0.1 e 5,7 possuem comportamento idêntico:
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma coluna STORED |
Não¹ |
Sim |
Não |
Não suportado |
|
Alterar a ordem de uma coluna STORED |
Não |
Sim |
Não |
Não suportado |
|
Excluir uma coluna STORED |
Sim |
Sim |
Não |
Suportado |
|
Adicionar uma coluna VIRTUAL |
Sim |
Não |
Sim |
Não aplicável |
|
Alterar a ordem de uma coluna VIRTUAL |
Não |
Sim |
Não |
Não suportado |
|
Excluir uma coluna VIRTUAL |
Sim |
Não |
Sim |
Não aplicável |
¹ Adicionar uma coluna STORED envolve a camada SQL/Server, portanto o Online DDL não é suportado.
Operações de chave estrangeira
O comportamento é idêntico em todas as versões (8.0.2, 8.0.1, 5,7, 5,6):
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma chave estrangeira |
Sim¹ |
Não¹ |
Sim¹ |
Não aplicável |
|
Excluir uma chave estrangeira |
Sim¹ |
Não¹ |
Sim¹ |
Não aplicável |
¹ O DDL INPLACE é suportado apenas quando foreign_key_checks está desativado e apenas metadados são modificados. Caso contrário, apenas o algoritmo COPY é suportado, bloqueando a tabela durante toda a duração.
Operações em tabelas particionadas
PolarDB for MySQL 8.0.2
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma partição (ADD) |
Sim¹ |
Não² |
Sim |
Não suportado |
|
Excluir uma partição (DROP) |
Sim¹ |
Não² |
Não |
Não suportado |
|
Descartar um tablespace de partição (DISCARD) |
Não |
Não |
Não |
Não suportado |
|
Importar um tablespace de partição (IMPORT) |
Não |
Não |
Não |
Não suportado |
|
Truncar uma partição (TRUNCATE) |
Sim |
Não |
Não |
Não suportado |
|
Mesclar partições (COALESCE) |
Não |
Sim³ |
Não |
Não suportado |
|
Reorganizar uma partição (REORGANIZE) |
Sim¹ |
Não⁴ |
Não |
Não suportado |
|
Trocar uma partição (EXCHANGE) |
Sim¹ |
Não |
Sim |
Não suportado |
|
Analisar uma partição (ANALYZE) |
Sim |
Não |
Não⁵ |
Não suportado |
|
Verificar uma partição (CHECK) |
Sim |
Não |
Não⁶ |
Não suportado |
|
Otimizar uma partição (OPTIMIZE) |
Sim⁷ |
Sim⁷ |
Não |
Suportado⁷ |
|
Reconstruir uma partição (REBUILD) |
Sim¹ |
Não⁴ |
Não |
Não suportado |
|
Reparar uma partição (REPAIR) |
Sim |
Não⁸ |
Não |
Não suportado |
|
Converter uma tabela em tabela particionada |
Não |
Sim |
Sim⁹ |
Não suportado |
|
Converter uma tabela particionada em tabela padrão |
Não |
Sim |
Não |
Não suportado |
|
Criar um índice parcial |
Sim |
Não¹⁰ |
Não |
Suportado |
¹ Quando loose_partition_level_mdl_enabled está definido como true, bloqueios de metadados (MDL) no nível de partição garantem que operações DDL não afetem o DML em partições não impactadas. Para mais informações, consulte Manutenção online de partições.
² Para tabelas particionadas por RANGE e LIST, adicionar ou excluir partições não exige reconstrução da tabela. Para tabelas particionadas por HASH e KEY, adicionar partições exige reconstrução da tabela. Não há suporte para exclusão de partições em tabelas particionadas por HASH e KEY.
³ Apenas partições HASH e KEY são suportadas.
⁴ Reorganizar ou reconstruir uma partição reconstrói apenas as partições especificadas que exigem redistribuição e reconstrução de dados. Outras partições não são afetadas.
⁵ Analisar uma partição modifica apenas estatísticas, não metadados ou dados da tabela.
⁶ Verificar uma partição não modifica metadados nem dados.
⁷ Ao executar OPTIMIZE PARTITION em uma tabela InnoDB, toda a tabela particionada é reconstruída. Leituras e gravações são permitidas durante a reconstrução. Defina innodb_parallel_build_primary_index como ON para usar DDL paralelo e acelerar a reconstrução.
⁸ Reparar uma partição reconstrói apenas as partições especificadas que necessitam de reparo.
⁹ A conversão instantânea suporta apenas a conversão rápida de uma tabela padrão em uma tabela particionada por range.
¹⁰ O PolarDB for MySQL suporta a criação e exclusão de índices no nível de partição. Para mais informações, consulte Índice parcial.
PolarDB for MySQL 8.0.1
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma partição (ADD) |
Não |
Não¹ |
Sim |
Não suportado |
|
Excluir uma partição (DROP) |
Não |
Não² |
Não |
Não suportado |
|
Descartar um tablespace de partição (DISCARD) |
Não |
Não |
Não |
Não suportado |
|
Importar um tablespace de partição (IMPORT) |
Não |
Não |
Não |
Não suportado |
|
Truncar uma partição (TRUNCATE) |
Sim |
Não |
Não |
Não suportado |
|
Mesclar partições (COALESCE) |
Não |
Sim |
Não |
Não suportado |
|
Reorganizar uma partição (REORGANIZE) |
Não |
Não³ |
Não |
Não suportado |
|
Trocar uma partição (EXCHANGE) |
Sim |
Sim |
Sim |
Não suportado |
|
Analisar uma partição (ANALYZE) |
Sim |
Sim |
Não⁴ |
Não suportado |
|
Verificar uma partição (CHECK) |
Sim |
Não |
Não⁵ |
Não suportado |
|
Otimizar uma partição (OPTIMIZE) |
Sim⁶ |
Sim⁶ |
Não |
Suportado⁶ |
|
Reconstruir uma partição (REBUILD) |
Não |
Não³ |
Não |
Não suportado |
|
Reparar uma partição (REPAIR) |
Sim |
Não³ |
Não |
Não suportado |
|
Converter uma tabela em tabela particionada |
Não |
Sim |
Não |
Não suportado |
|
Converter uma tabela particionada em tabela padrão |
Não |
Sim |
Não |
Não suportado |
¹ Para tabelas particionadas por RANGE e LIST, adicionar partições não exige reconstrução da tabela. Para tabelas particionadas por HASH e KEY, adicionar partições exige reconstrução da tabela.
² Não há suporte para exclusão de partições em tabelas particionadas por HASH e KEY.
³ Reorganizar, reconstruir e reparar uma partição reconstrói apenas as partições especificadas. Outras partições não são afetadas.
⁴ Analisar uma partição modifica apenas estatísticas, não metadados ou dados da tabela.
⁵ Verificar uma partição não modifica metadados nem dados.
⁶ Ao executar OPTIMIZE PARTITION em uma tabela InnoDB, toda a tabela particionada é reconstruída. Leituras e gravações são permitidas durante a reconstrução. Defina innodb_parallel_build_primary_index como ON para usar DDL paralelo e acelerar a reconstrução.
PolarDB for MySQL 5,7
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma partição (ADD) |
Não |
Não¹ |
Sim |
Não suportado |
|
Excluir uma partição (DROP) |
Não |
Não¹ |
Não |
Não suportado |
|
Descartar um tablespace de partição (DISCARD) |
Não |
Não |
Não |
Não suportado |
|
Importar um tablespace de partição (IMPORT) |
Não |
Não |
Não |
Não suportado |
|
Truncar uma partição (TRUNCATE) |
Sim |
Não |
Não |
Não suportado |
|
Mesclar partições (COALESCE) |
Não |
Sim |
Não |
Não suportado |
|
Reorganizar uma partição (REORGANIZE) |
Não |
Não² |
Não |
Não suportado |
|
Trocar partição |
Sim |
Não |
Sim |
Não suportado |
|
Analisar uma partição (ANALYZE) |
Sim |
Não |
Não³ |
Não suportado |
|
Verificar uma partição (CHECK) |
Sim |
Não |
Não⁴ |
Não suportado |
|
Otimizar uma partição (OPTIMIZE) |
Não |
Sim |
Não |
Não suportado |
|
Reconstruir uma partição (REBUILD) |
Não |
Não² |
Não |
Não suportado |
|
Reparar uma partição (REPAIR) |
Sim |
Não² |
Não |
Não suportado |
|
Converter uma tabela em tabela particionada |
Não |
Sim |
Não |
Não suportado |
|
Converter uma tabela particionada em tabela padrão |
Não |
Sim |
Não |
Não suportado |
¹ Para tabelas particionadas por RANGE e LIST, adicionar ou excluir partições não exige reconstrução da tabela. Para tabelas particionadas por HASH e KEY, adicionar partições exige reconstrução da tabela. Não há suporte para exclusão de partições em tabelas particionadas por HASH e KEY.
² Reorganizar, reconstruir e reparar uma partição reconstrói apenas as partições especificadas. Outras partições não são afetadas.
³ Analisar uma partição modifica apenas estatísticas, não metadados ou dados da tabela.
⁴ Verificar uma partição não modifica metadados nem dados.
PolarDB for MySQL 5,6
|
Operação |
DML simultâneo |
Reconstrói tabela |
Apenas metadados |
DDL paralelo |
|
Adicionar uma partição (ADD) |
Não |
Não¹ |
Sim |
Não suportado |
|
Excluir uma partição (DROP) |
Não |
Não¹ |
Não |
Não suportado |
|
Descartar um tablespace de partição (DISCARD) |
Não |
Não |
Não |
Não suportado |
|
Importar um tablespace de partição (IMPORT) |
Não |
Não |
Não |
Não suportado |
|
Truncar uma partição (TRUNCATE) |
Sim |
Não |
Não |
Não suportado |
|
Mesclar partições (COALESCE) |
Não |
Sim |
Não |
Não suportado |
|
Reorganizar uma partição (REORGANIZE) |
Não |
Não² |
Não |
Não suportado |
|
Trocar uma partição (EXCHANGE) |
Sim |
Não |
Sim |
Não suportado |
|
Analisar uma partição (ANALYZE) |
Sim |
Não |
Não³ |
Não suportado |
|
Verificar uma partição (CHECK) |
Sim |
Não |
Não⁴ |
Não suportado |
|
Otimizar uma partição (OPTIMIZE) |
Não |
Sim |
Não |
Não suportado |
|
Reconstruir uma partição (REBUILD) |
Não |
Não² |
Não |
Não suportado |
|
Reparar uma partição (REPAIR) |
Sim |
Não² |
Não |
Não suportado |
|
Converter uma tabela em tabela particionada |
Não |
Sim |
Não |
Não suportado |
|
Converter uma tabela particionada em tabela padrão |
Não |
Sim |
Não |
Não suportado |
¹ Para tabelas particionadas por RANGE e LIST, adicionar ou excluir partições não exige reconstrução da tabela. Para tabelas particionadas por HASH e KEY, adicionar partições exige reconstrução da tabela. Não há suporte para exclusão de partições em tabelas particionadas por HASH e KEY.
² Reorganizar, reconstruir e reparar uma partição reconstrói apenas as partições especificadas. Outras partições não são afetadas.
³ Analisar uma partição modifica apenas estatísticas, não metadados ou dados da tabela.
⁴ Verificar uma partição não modifica metadados nem dados.
Escolha um método de execução
Quando uma operação DDL utiliza o algoritmo INSTANT ou INPLACE, execute-a diretamente usando o kernel (Online DDL). Esta é a abordagem mais rápida e estável.
Quando uma operação DDL utiliza o algoritmo COPY, a tabela fica bloqueada durante toda a duração. Nesse caso, considere usar o DDL sem bloqueio no DMS ou uma ferramenta como gh-ost para permitir leituras e gravações durante a execução. Essas abordagens são mais lentas e podem falhar em tabelas grandes ou cargas de trabalho de alta concorrência devido ao excesso de dados incrementais.
|
Método |
Leituras e gravações simultâneas |
Velocidade |
Binary logging necessário |
Aceleração paralela |
|
Kernel (Online DDL) |
Sim |
Rápida |
Não |
Suportada |
|
DDL sem bloqueio no DMS, gh-ost |
Sim |
Lenta |
Sim |
Não suportada |
Mesmo com ferramentas de terceiros, um bloqueio MDL-X é adquirido durante a troca de tabelas (quando metadados são modificados), bloqueando temporariamente a tabela. Para resolver isso, ative o recurso de DDL sem bloqueio ou o recurso de DDL preemptivo .
Operações DDL sem bloqueio podem aumentar o uso de IOPS e CPU. Execute-as fora dos horários de pico.
Tópicos relacionados
DDL paralelo — acelere DDL em tabelas grandes com execução multithread
EXPLAIN DDL — visualize o comportamento de execução do DDL antes de executá-lo
adição instantânea de coluna — adicione colunas sem reconstruir a tabela
Implementando evolução de schema sem bloqueio — execute DDL com algoritmo COPY sem impactar sua aplicação
Manutenção online de partições — DDL de partição que não bloqueia DML em partições não afetadas
DDL sem bloqueio e DDL preemptivo — reduza a contenção de bloqueios MDL durante alterações de schema
Se tiver dúvidas sobre operações DDL, entre em contato com o suporte técnico.