Todos os produtos
Search
Central de documentação

PolarDB:DDL for cold data

Última atualização: Jun 28, 2026

Ao executar instruções DDL em tabelas de dados frios armazenadas no Object Storage Service (OSS), o PolarDB for MySQL seleciona automaticamente o algoritmo de execução mais eficiente. Este documento explica os dois algoritmos compatíveis — INSTANT e COPY —, descreve o requisito OSS META para DDL INSTANT e lista as operações que utilizam cada algoritmo, permitindo planejar alterações de DDL sem interromper a carga de trabalho.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster PolarDB for MySQL executando MySQL 8.0.2 com versão de revisão 8.0.2.2.23 ou posterior

  • Arquivamento de dados frios ativado no cluster. Consulte Ativar arquivamento de dados frios

  • Uma conexão ativa com o cluster. Consulte Conectar-se a um cluster

  • Dados frios no formato CSV (valores separados por vírgula) ou ORC (Optimized Row Columnar)

Como funciona

O PolarDB for MySQL oferece suporte a dois algoritmos de execução de DDL para dados frios:

  • Algoritmo INSTANT: Modifica apenas metadados no dicionário de dados. Os dados existentes não sofrem alteração, cópia ou reconstrução. A operação é concluída em segundos, independentemente do tamanho da tabela. Esse é o comportamento padrão; o PolarDB for MySQL aplica-o automaticamente quando há suporte.

  • COPY algorithm: Copia todos os dados da tabela para uma nova tabela. Durante a cópia, a tabela original fica sob um bloqueio SHARED_NO_WRITE (SNW): leituras são permitidas, mas gravações são bloqueadas. Utilize esse algoritmo apenas quando o INSTANT não for aplicável.

Para especificar um algoritmo explicitamente, use a cláusula ALGORITHM com DEFAULT, INSTANT ou COPY. Se o algoritmo especificado não oferecer suporte à operação, o sistema retornará um erro.

Nota

O PolarDB for MySQL seleciona INSTANT por padrão e recorre ao COPY apenas quando a operação exige a reconstrução da tabela.

Ative OSS META para usar DDL INSTANT

Uma tabela oferece suporte a DDL INSTANT somente se o OSS META estiver ativado. O OSS META é uma camada aprimorada de metadados disponível na revisão 8.0.2.2.23 e posteriores.

Verifique se o OSS META está ativado

Execute SHOW CREATE TABLE. Se OSS META=1 aparecer na saída, o OSS META estará ativado.

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)

Ative OSS META para novas tabelas

Defina o parâmetro use_oss_meta como ON. Essa configuração aplica-se aos três cenários de arquivamento: tabelas InnoDB não particionadas arquivadas em tabelas externas OSS, tabelas InnoDB particionadas arquivadas em tabelas externas OSS e tabelas InnoDB arquivadas em partições OSS.

Verifique se o parâmetro está ativo:

show variables like "use_oss_meta";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| use_oss_meta  | ON    |
+---------------+-------+
1 row in set (0.03 sec)

Quando use_oss_meta está definido como ON, as tabelas recém-arquivadas incluem automaticamente o marcador OSS META. Os exemplos a seguir mostram o marcador após o arquivamento de uma tabela não particionada e de uma tabela particionada:

alter table t engine = csv storage oss;
Query OK, 3 rows affected (2.13 sec)
Records: 3  Duplicates: 0  Warnings: 0

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)

alter table t1 change partition p0 engine = orc;
Query OK, 0 rows affected (1.95 sec)
Records: 0  Duplicates: 0  Warnings: 0

show create table t1 \G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `order_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020223 OSS META=1 */ CONNECTION='default_oss_server'
/*!99990 800020205 PARTITION BY RANGE  COLUMNS(id)
(PARTITION p0 VALUES LESS THAN (10) ENGINE = ORC,
 PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB,
 PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB,
 PARTITION p4 VALUES LESS THAN (50) ENGINE = InnoDB,
 PARTITION p5 VALUES LESS THAN (60) ENGINE = InnoDB,
 PARTITION p6 VALUES LESS THAN (70) ENGINE = InnoDB,
 PARTITION p7 VALUES LESS THAN (80) ENGINE = InnoDB,
 PARTITION p8 VALUES LESS THAN (90) ENGINE = InnoDB,
 PARTITION p9 VALUES LESS THAN (100) ENGINE = InnoDB,
 PARTITION p10 VALUES LESS THAN (110) ENGINE = InnoDB) */
1 row in set (0.00 sec)

Ative OSS META para tabelas existentes

Execute REPAIR TABLE para adicionar o OSS META a uma tabela existente:

repair table t;
+--------+--------+----------+----------+
| Table  | Op     | Msg_type | Msg_text |
+--------+--------+----------+----------+
| test.t | repair | status   | OK       |
+--------+--------+----------+----------+
1 row in set (0.84 sec)

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)
Importante

Durante a execução de REPAIR TABLE, a tabela fica bloqueada pelo bloqueio X. Não é possível consultar ou modificar a tabela. O tempo de execução aumenta proporcionalmente ao tamanho da tabela.

Desativar OSS META

Execute ALTER TABLE ... DISABLE OSS META para remover o marcador OSS META:

alter table t disable oss meta;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */
1 row in set (0.00 sec)
Nota

A alteração entra em vigor imediatamente, sem necessidade de reiniciar o serviço de banco de dados.

Operações DDL compatíveis

As tabelas abaixo indicam se cada operação utiliza INSTANT (apenas metadados) ou COPY (reconstrução da tabela).

Operações de coluna

Operação

Reconstrói a tabela

Modifica apenas metadados

Adicionar uma coluna

Não¹

Sim¹

Remover uma coluna

Sim

Não

Renomear uma coluna

Não

Sim

Ordenar colunas

Sim

Não

Especifique o valor padrão de uma coluna

Não

Sim

Modifique o comentário de uma coluna

Não

Sim

Alterar o tipo de uma coluna

Sim

Não

Estender o comprimento de uma coluna VARCHAR

Não

Sim

Alterar o conjunto de caracteres utf8mb3 de uma coluna para utf8mb4

Não²

Sim²

Excluir o valor padrão de uma coluna

Não

Sim

Alterar o valor de incremento automático de uma coluna

Não

Sim

Alterar os valores de uma coluna para NULL

Sim

Não

Alterar os valores de uma coluna para valores não NULL

Sim

Não

Alterar a definição de uma coluna ENUM ou SET

Não

Sim³

Nota de rodapé 1 — Adicionar uma coluna: O recurso Instant ADD COLUMN adiciona colunas apenas ao final de uma tabela com OSS META ativado. Se a tabela não tiver chave primária, defina implicit_primary_key como OFF para evitar conflitos com uma coluna de chave primária implícita gerada automaticamente. Caso o cluster não ofereça suporte a Instant ADD COLUMN, utilize o algoritmo COPY. A reconstrução da tabela é necessária, embora leituras simultâneas sejam permitidas durante o processo.

Nota de rodapé 2 — Alterar utf8mb3 para utf8mb4: A alteração do conjunto de caracteres de uma coluna de utf8mb3 para utf8mb4 modifica apenas metadados quando as três condições seguintes são atendidas:

  • O tipo da coluna é CHAR, VARCHAR, ENUM ou TEXT

  • Não há índices criados na coluna

  • O comprimento máximo de armazenamento da coluna (antes e depois da conversão) permanece abaixo de 256 bytes ou acima de 255 bytes

Se alguma condição não for atendida, o sistema utilizará o algoritmo COPY. A tabela fica bloqueada e apenas leituras são permitidas durante a reconstrução. Para forçar o uso de INSTANT e receber um erro imediato caso não seja aplicável:

ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = INSTANT;
ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.

Nota de rodapé 3 — Coluna ENUM ou SET: A alteração apenas de metadados aplica-se somente quando novos elementos são adicionados ao final da coluna ENUM ou SET e o tamanho de armazenamento do tipo de dados permanece inalterado. Caso contrário, o sistema utiliza o algoritmo COPY com reconstrução completa da tabela.

Operações de tabela

Operação

Reconstrói a tabela

Modifica apenas metadados

Ative META

Sim

Não

Desativar META

Não

Sim

Declarar um conjunto de caracteres

Não

Sim

Converter um conjunto de caracteres

Sim

Não

Renomear uma tabela

Não

Sim¹

Modifique o comentário de uma tabela

Não

Sim

Nota de rodapé 1 — Renomear uma tabela: Ao renomear uma tabela armazenada no OSS, os arquivos de dados no OSS são renomeados em vez de reescritos. A velocidade é proporcional ao tamanho da tabela e ligeiramente menor do que em outras operações INSTANT que modificam apenas metadados.