Todos los productos
Search
Centro de documentos

PolarDB:Guía de operaciones DDL para PolarDB for MySQL

Última actualización: Oct 10, 2026

Este tema describe las operaciones DDL comunes de la base de datos nativa de la nube PolarDB for MySQL. Le ayuda a consultar y comprender el comportamiento de DDL, evaluar el riesgo de estas operaciones y reducir su impacto en las cargas de trabajo.

Descripción general de las operaciones DDL

En el ecosistema de MySQL, DDL abarca un conjunto complejo de operaciones que incluye índices, claves primarias, columnas, tablas, claves externas y columnas generadas. Las operaciones DDL consumen mucho tiempo y recursos de hardware, y muchas de ellas bloquean las tablas. Si se ejecutan de forma inadecuada, pueden interrumpir las cargas de trabajo normales y provocar un impacto catastrófico.

PolarDB for MySQL ha mejorado significativamente el rendimiento de DDL y la estabilidad de los bloqueos gracias a años de experiencia acumulada y a la iteración continua de sus funciones. Este tema describe el comportamiento de las operaciones DDL comunes en cada versión de PolarDB for MySQL desde los siguientes aspectos:

  • Si la tabla se bloquea (DML concurrente permitido): una operación DDL sin bloqueo (Online DDL) solicita un bloqueo mutex de tabla únicamente mientras modifica los metadatos. Por lo general, este bloqueo no dura más de 1 segundo. Se permiten lecturas y escrituras en la tabla de destino durante el cambio de esquema, lo que mejora la velocidad de respuesta y la disponibilidad en entornos de producción. En cambio, las instrucciones que no admiten Online DDL bloquean la tabla durante todo el proceso y no permiten escrituras simultáneas. Una operación DDL prolongada de este tipo puede afectar gravemente sus cargas de trabajo.

  • Si la tabla se reconstruye (duración): este tipo de operación DDL recrea la clave primaria y todos los índices secundarios con base en el nuevo esquema de la tabla, lo cual suele tomar bastante tiempo.

    Nota

    Dado que PolarDB for MySQL admite DDL paralelo, ejecutar una operación DDL con el kernel es mucho más rápido que hacerlo con herramientas de terceros como gh-ost o pt-osc.

  • Si solo se modifican los metadatos (se completa en segundos): únicamente se modifican los metadatos y los datos de la tabla permanecen intactos. El tiempo de ejecución de este tipo de operación DDL no aumenta con el tamaño de la tabla y, por lo general, se completa en cuestión de segundos.

  • Si se admite DDL paralelo (aceleración multihilo): para escenarios como la creación de índices o la reconstrucción de tablas grandes, PolarDB utiliza DDL paralelo multihilo para mejorar la eficiencia de ejecución hasta 15 o 20 veces. Para obtener más información, consulte Parallel DDL.

  • Si el rendimiento se ve afectado (cambio sin bloqueo): Use lock-free change tickets to perform lock-free schema changes no provoca desconexiones transitorias ni afecta las cargas de trabajo durante los periodos de menor actividad.

    Nota

    Ejecute esta operación durante los periodos de menor actividad, ya que puede aumentar el uso de IOPS y CPU.

Algoritmos de ejecución de DDL

PolarDB for MySQL admite los tres algoritmos de ejecución de DDL a continuación:

  • Algoritmo INSTANT: una operación DDL que utiliza el algoritmo INSTANT modifica únicamente los metadatos del diccionario de datos. No modifica ni copia los datos existentes, y tampoco reconstruye la tabla. Por lo tanto, la operación es independiente del tamaño de la tabla y todo el proceso DDL se completa en segundos.

  • Algoritmo INPLACE: con el algoritmo INPLACE, la copia y reconstrucción de datos ocurren dentro del motor, por lo que la ejecución es más rápida. La mayoría de las operaciones DDL que usan este algoritmo permiten lecturas y escrituras simultáneas, y tienen poco impacto en las cargas de trabajo. Además, algunas operaciones DDL con el algoritmo INPLACE, como RENAME TABLE y ADD COMMENT, solo modifican metadatos sin alterar los datos de la tabla y se completan en segundos.

  • Algoritmo COPY: una operación DDL que utiliza el algoritmo COPY copia todos los datos de la tabla hacia una nueva. Durante la copia, se mantiene un bloqueo SNW (SHARED_NO_WRITE) sobre la tabla original. Solo se admiten operaciones de lectura y no se permiten escrituras simultáneas durante la ejecución de DDL, lo cual tiene un impacto significativo en las cargas de trabajo.

Las operaciones DDL que permiten lecturas y escrituras simultáneas se denominan colectivamente Online DDL y tienen un impacto relativamente bajo en las cargas de trabajo. En la mayoría de los casos, no necesita especificar manualmente el algoritmo para una operación DDL. PolarDB selecciona automáticamente el mejor algoritmo en el siguiente orden: INSTANT, INPLACE y COPY. También puede usar las cláusulas ALGORITHM y LOCK de la instrucción ALTER TABLE para fine-tune el comportamiento de DDL:

  • Cláusula ALGORITHM: para ejecutar una instrucción DDL con un algoritmo específico, especifique el campo ALGORITHM. Valores válidos: DEFAULT, INSTANT, INPLACE y COPY. Si la operación DDL no admite el algoritmo indicado, se devuelve un error de inmediato.

  • Cláusula LOCK: esta cláusula ajusta el acceso concurrente a la tabla durante la ejecución de DDL. Úsela para controlar el nivel de lecturas y escrituras simultáneas mientras se modifica la tabla. Opciones válidas y su significado:

    • DEFAULT: el kernel permite el nivel máximo de lecturas y escrituras simultáneas según el tipo de DDL.

    • NONE: se permiten lecturas y escrituras simultáneas durante la ejecución de DDL. Se devuelve un error si no son compatibles.

    • SHARED: se permiten lecturas simultáneas, pero se bloquean las escrituras. Se devuelve un error si no se admiten las lecturas simultáneas.

    • EXCLUSIVE: se prohíben todas las lecturas y escrituras simultáneas durante la ejecución de DDL.

Para evitar que la tabla quede inaccesible durante la ejecución de ALTER TABLE, especifique la cláusula LOCK en dicha instrucción. Si el comportamiento de bloqueo de la ejecución DDL no cumple con la condición indicada, la operación se detiene de inmediato.

Vista previa de las características de ejecución de DDL con EXPLAIN DDL

Este tema enumera las características de ejecución de las operaciones DDL comunes. Sin embargo, dado que PolarDB ofrece un amplio conjunto de funciones, el comportamiento real de ejecución de DDL puede verse afectado por varios factores, como la estructura de la tabla de destino, la configuración de parámetros de la instancia y si ciertas funciones están habilitadas.

Para que los cambios de esquema sean más seguros y predecibles, se recomienda encarecidamente utilizar la función EXPLAIN DDL para conocer las características de ejecución de una operación DDL antes de ejecutar operaciones complejas.

Utilice la siguiente sintaxis para consultar las características de ejecución de una operación DDL:

{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...

Con EXPLAIN DDL, puede obtener la siguiente información clave:

  • Si la operación DDL actual se puede ejecutar correctamente.

  • El tipo de algoritmo que utiliza la operación DDL actual. Valores válidos: INSTANT, INPLACE y COPY.

  • Si la operación DDL actual necesita reconstruir los datos de toda la tabla. Una reconstrucción completa suele tomar mucho tiempo.

  • Si se permiten operaciones DML simultáneas durante la ejecución de DDL actual.

  • Si la operación DDL actual está bloqueada por transacciones no confirmadas.

  • Si la operación DDL actual admite la aceleración mediante DDL paralelo. De ser así, se muestra el grado de paralelismo de la operación.

Con esta información anticipada, puede evaluar el impacto de una operación DDL con mayor precisión, elegir el momento adecuado para ejecutarla y evitar que los bloqueos de tabla y los tiempos de ejecución prolongados afecten sus cargas de trabajo en producción. Para obtener más información, consulte EXPLAIN DDL.

Características de comportamiento de DDL

Operaciones de índice

PolarDB for MySQL 8.0.2

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Crear un índice secundario

Sí

No

No

Compatible

Eliminar un índice secundario

Sí

No

Sí

N/A

Cambiar el nombre de un índice secundario

Sí

No

Sí

N/A

Agregar un índice de texto completo (FULLTEXT)

No

No

Nota

Cuando agrega el primer índice de texto completo a una tabla, se desencadena una reconstrucción adicional de la tabla si no existe una columna FTS_DOC_ID definida por el usuario.

No

No compatible

Agregar un índice espacial (SPATIAL)

No

No

No

No compatible

PolarDB for MySQL 8.0.1

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Crear un índice secundario

Sí

No

No

Compatible

Eliminar un índice secundario

Sí

No

Sí

N/A

Cambiar el nombre de un índice secundario

Sí

No

Sí

N/A

Agregar un índice de texto completo (FULLTEXT)

No

No

Nota

Cuando agrega el primer índice de texto completo a una tabla, se desencadena una reconstrucción adicional de la tabla si no existe una columna FTS_DOC_ID definida por el usuario.

No

No compatible

Agregar un índice espacial (SPATIAL)

No

No

No

No compatible

PolarDB for MySQL 5.7

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Crear un índice secundario

Sí

No

No

Compatible

Eliminar un índice secundario

Sí

No

Sí

N/A

Cambiar el nombre de un índice secundario

Sí

No

Sí

N/A

Agregar un índice de texto completo (FULLTEXT)

No

No

Nota

Cuando agrega el primer índice de texto completo a una tabla, se desencadena una reconstrucción adicional de la tabla si no existe una columna FTS_DOC_ID definida por el usuario.

No

No compatible

Agregar un índice espacial (SPATIAL)

No

No

No

No compatible

PolarDB for MySQL 5.6

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Crear un índice secundario

Sí

No

No

No compatible

Eliminar un índice secundario

Sí

No

Sí

N/A

Agregar un índice de texto completo (FULLTEXT)

No

No

Nota

Cuando agrega el primer índice de texto completo a una tabla, se desencadena una reconstrucción adicional de la tabla si no existe una columna FTS_DOC_ID definida por el usuario.

No

No compatible

Agregar un índice espacial (SPATIAL)

No

No

No

No compatible

Operaciones de clave primaria

PolarDB for MySQL 8.0.2

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Agregar una clave primaria

Sí

Sí

No

Compatible

Eliminar una clave primaria

No

Sí

No

No compatible

Eliminar la clave primaria existente y agregar una nueva

Sí

Sí

No

Compatible

PolarDB for MySQL 8.0.1

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Agregar una clave primaria

Sí

Sí

No

Compatible

Eliminar una clave primaria

No

Sí

No

No compatible

Eliminar la clave primaria existente y agregar una nueva

Sí

Sí

No

Compatible

PolarDB for MySQL 5.7

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Agregar una clave primaria

Sí

Sí

No

Compatible

Eliminar una clave primaria

No

Sí

No

No compatible

Eliminar la clave primaria existente y agregar una nueva

Sí

Sí

No

Compatible

PolarDB for MySQL 5.6

Operación

DML concurrente permitido

Reconstruye la tabla

Solo metadatos

DDL paralelo compatible

Agregar una clave primaria

Sí

Sí

No

No compatible

Eliminar una clave primaria

No

Sí

No

No compatible

Eliminar la clave primaria existente y agregar una nueva

Sí

Sí

No

No compatible

Nota

En los siguientes escenarios, el DML concurrente solo se permite cuando el parámetro del clúster sql_mode contiene STRICT_TRANS_TABLES o STRICT_ALL_TABLES:

  • Agregar una clave primaria

  • Eliminar la clave primaria existente y agregar una nueva

Operaciones de columnas

PolarDB for MySQL 8.0.2

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una columna

Sí

No1

Sí1

Compatible1

Eliminar una columna

Sí

Sí

No

Compatible

Cambiar el nombre de una columna

Sí

No

Sí

N/A

Reordenar columnas

Sí

Sí

No

Compatible

Establecer el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el comentario de una columna

Sí

No

Sí

N/A

Cambiar el tipo de una columna

No

Sí

No

No compatible

Aumentar la longitud de una columna VARCHAR

Sí2

No

Sí

N/A

Cambiar el juego de caracteres de UTF8mb3 a UTF8mb4

No

No3

Sí3

No compatible

Quitar el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el valor de incremento automático

Sí

No

Sí

N/A

Cambiar una columna a NULL

Sí

Sí

No

Compatible

Cambiar una columna a NOT NULL

No

Sí

No

No compatible

Modificar la definición de una columna ENUM o SET

Sí

No

Sí4

N/A

  1. La función Instant column addition at the end of a table solo permite agregar una columna al final de la tabla. Si la tabla no tiene una clave primaria explícita, establezca el parámetro implicit_primary_key en OFF. De este modo se evita que la operación instantánea de agregar columna falle por la presencia de una columna de clave primaria implícita al final de la tabla. Esta operación no es compatible con tablas comprimidas (ROW_FORMAT=COMPRESSED), tablas con índices de texto completo ni tablas temporales. Cuando el clúster no admite la adición instantánea de columnas, agregar una columna ejecuta la instrucción DDL con el algoritmo INPLACE, lo cual requiere reconstruir toda la tabla. Durante esta reconstrucción se permiten lecturas y escrituras simultáneas. También puede utilizar DDL paralelo para acelerar la operación.

  2. Al aumentar la longitud de una columna VARCHAR, la cantidad de bytes usados para almacenar dicha longitud debe mantenerse igual para que funcione la extensión rápida. En concreto, una columna VARCHAR de 0 a 255 bytes necesita un solo byte para guardar su longitud, mientras que una de 256 bytes o más requiere dos. Solo si el aumento permanece dentro del mismo rango de bytes, como entre 0 y 255 o de 256 hacia un valor mayor, ALTER TABLE modificará únicamente los metadatos. Cuando se amplía una columna VARCHAR de menos de 256 bytes a 256 o más, PolarDB usa Copy DDL de forma predeterminada y bloquea la tabla durante todo el proceso. Las operaciones DML de escritura no son compatibles; solo se permiten las de lectura.

    Si no está seguro de que la modificación de VARCHAR cumpla estas condiciones, use ALGORITHM=INPLACE para ejecutar la operación DDL actual con el algoritmo INPLACE. Si la extensión rápida de columnas no es compatible, se devuelve un error de inmediato. Ejemplo:

    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.

    VARCHAR es un tipo de almacenamiento de longitud variable y el disco guarda únicamente la longitud real. Al usar campos VARCHAR, considere establecer la longitud máxima en 256 bytes o más desde el inicio. Así evitará que ampliar el campo después requiera el algoritmo COPY.

  3. Cuando se cumplen las siguientes condiciones, cambiar el juego de caracteres de una columna de UTF8mb3 a UTF8mb4 modifica solo los metadatos y no los datos. De lo contrario, se requiere el algoritmo COPY para reconstruir la tabla, la cual permanece bloqueada durante todo el proceso. La tabla de destino solo admite lecturas y no escrituras.

    • El tipo de la columna es CHAR, VARCHAR, ENUM o TEXT.

    • No existe ningún índice en la columna que se va a modificar.

    • La longitud máxima de almacenamiento de la columna es menor a 256 bytes tanto antes como después de la conversión del juego de caracteres, o bien mayor a 255 bytes en ambos casos.

    Especifique ALGORITHM=INPLACE para forzar la ejecución de la operación DDL sin reconstruir la tabla. Si la operación requiere el algoritmo COPY, se devuelve un error de inmediato. Ejemplo:

    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.
  4. La operación modifica únicamente los metadatos sin reconstruir toda la tabla cuando el tamaño de almacenamiento del tipo de dato no cambia y los elementos se agregan al final de ENUM o SET. En caso contrario, se requiere el algoritmo COPY para reconstruir la tabla.

PolarDB for MySQL 8.0.1

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una columna

Sí

No1

Sí1

Compatible1

Eliminar una columna

Sí

Sí

No

Compatible

Cambiar el nombre de una columna

Sí

No

Sí

N/A

Reordenar columnas

Sí

Sí

No

Compatible

Establecer el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el comentario de una columna

Sí

No

Sí

N/A

Cambiar el tipo de una columna

No

Sí

No

No compatible

Aumentar la longitud de una columna VARCHAR

Sí2

No

Sí

N/A

Cambiar el juego de caracteres de UTF8mb3 a UTF8mb4

No

No3

Sí3

No compatible

Quitar el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el valor de incremento automático

Sí

No

Sí

N/A

Cambiar una columna a NULL

Sí

Sí

No

Compatible

Cambiar una columna a NOT NULL

No

Sí

No

No compatible

Modificar la definición de una columna ENUM o SET

Sí

No

Sí4

N/A

  1. La función Instant column addition at the end of a table solo permite agregar una columna al final de la tabla. Si la tabla no tiene una clave primaria explícita, establezca el parámetro implicit_primary_key en OFF. De este modo se evita que la operación instantánea de agregar columna falle por la presencia de una columna de clave primaria implícita al final de la tabla. Esta operación no es compatible con tablas comprimidas (ROW_FORMAT=COMPRESSED), tablas con índices de texto completo ni tablas temporales. Cuando el clúster no admite la adición instantánea de columnas, agregar una columna ejecuta la instrucción DDL con el algoritmo INPLACE, lo cual requiere reconstruir toda la tabla. Durante esta reconstrucción se permiten lecturas y escrituras simultáneas. También puede utilizar DDL paralelo para acelerar la operación.

    Además, si la tabla cuenta con un índice columnstore, la adición instantánea de columnas no es compatible porque agregar una columna exige reconstruir dicho índice. Establezca el parámetro loose_imci_enable_add_column_instant_ddl en ON para habilitar esta función. En ese caso, PolarDB reconstruye el índice columnstore de forma asíncrona en segundo plano. El índice columnstore no estará disponible temporalmente durante la reconstrucción. Para obtener más información, consulte Execute DDL statements to dynamically create and delete an IMCI.

  2. Al aumentar la longitud de una columna VARCHAR, la cantidad de bytes usados para almacenar dicha longitud debe mantenerse igual para que funcione la extensión rápida. En concreto, una columna VARCHAR de 0 a 255 bytes necesita un solo byte para guardar su longitud, mientras que una de 256 bytes o más requiere dos. Solo si el aumento permanece dentro del mismo rango de bytes, como entre 0 y 255 o de 256 hacia un valor mayor, ALTER TABLE modificará únicamente los metadatos. Cuando se amplía una columna VARCHAR de menos de 256 bytes a 256 o más, PolarDB usa Copy DDL de forma predeterminada y bloquea la tabla durante todo el proceso. Las operaciones DML de escritura no son compatibles; solo se permiten las de lectura.

    Si no está seguro de que la modificación de VARCHAR cumpla estas condiciones, use ALGORITHM=INPLACE para ejecutar la operación DDL actual con el algoritmo INPLACE. Si la extensión rápida de columnas no es compatible, se devuelve un error de inmediato. Ejemplo:

    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.

    VARCHAR es un tipo de almacenamiento de longitud variable y el disco guarda únicamente la longitud real. Al usar campos VARCHAR, considere establecer la longitud máxima en 256 bytes o más desde el inicio. Así evitará que ampliar el campo después requiera el algoritmo COPY.

  3. Cuando el parámetro loose_innodb_support_instant_modify_charset se establece en ON y se cumplen las siguientes condiciones, cambiar el juego de caracteres de una columna de UTF8mb3 a UTF8mb4 modifica solo los metadatos y no los datos. De lo contrario, se requiere el algoritmo COPY para reconstruir la tabla, la cual permanece bloqueada durante todo el proceso. La tabla de destino solo admite lecturas y no escrituras.

    • El tipo de la columna es CHAR, VARCHAR, ENUM o TEXT.

    • No existe ningún índice en la columna que se va a modificar.

    • La longitud máxima de almacenamiento de la columna es menor a 256 bytes tanto antes como después de la conversión del juego de caracteres, o bien mayor a 255 bytes en ambos casos.

    Especifique ALGORITHM=INPLACE para forzar la ejecución de la operación DDL sin reconstruir la tabla. Si la operación requiere el algoritmo COPY, se devuelve un error de inmediato. Ejemplo:

    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.
  4. La operación modifica únicamente los metadatos sin reconstruir toda la tabla cuando el tamaño de almacenamiento del tipo de dato no cambia y los elementos se agregan al final de ENUM o SET. En caso contrario, se requiere el algoritmo COPY para reconstruir la tabla.

PolarDB for MySQL 5.7

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una columna

Sí

No1

Sí1

Compatible1

Eliminar una columna

Sí

Sí

No

Compatible

Cambiar el nombre de una columna

Sí

No

Sí

N/A

Reordenar columnas

Sí

Sí

No

Compatible

Establecer el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el comentario de una columna

Sí

No

Sí

N/A

Cambiar el tipo de una columna

No

Sí

No

No compatible

Aumentar la longitud de una columna VARCHAR

Sí2

No

Sí

N/A

Cambiar el juego de caracteres de UTF8mb3 a UTF8mb4

No

Sí

No

No compatible

Quitar el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el valor de incremento automático

Sí

No

Sí

N/A

Cambiar una columna a NULL

Sí

Sí

No

Compatible

Cambiar una columna a NOT NULL

No

Sí

No

No compatible

Modificar la definición de una columna ENUM o SET

Sí

No

Sí3

N/A

  1. Para habilitar la función Instant column addition at the end of a table, establezca el parámetro loose_innodb_support_instant_add_column en ON. Solo se admite agregar una columna al final de la tabla. Si la tabla no tiene una clave primaria explícita, establezca el parámetro implicit_primary_key en OFF. De este modo se evita que la operación instantánea de agregar columna falle por la presencia de una columna de clave primaria implícita al final de la tabla. Esta operación no es compatible con tablas comprimidas (ROW_FORMAT=COMPRESSED), tablas con índices de texto completo ni tablas temporales. Cuando el clúster no admite la adición instantánea de columnas, agregar una columna ejecuta la instrucción DDL con el algoritmo INPLACE, lo cual requiere reconstruir toda la tabla. Durante esta reconstrucción se permiten lecturas y escrituras simultáneas. También puede utilizar DDL paralelo para acelerar la operación.

  2. Al aumentar la longitud de una columna VARCHAR, la cantidad de bytes usados para almacenar dicha longitud debe mantenerse igual para que funcione la extensión rápida. En concreto, una columna VARCHAR de 0 a 255 bytes necesita un solo byte para guardar su longitud, mientras que una de 256 bytes o más requiere dos. Solo si el aumento permanece dentro del mismo rango de bytes, como entre 0 y 255 o de 256 hacia un valor mayor, ALTER TABLE modificará únicamente los metadatos. Cuando se amplía una columna VARCHAR de menos de 256 bytes a 256 o más, PolarDB usa Copy DDL de forma predeterminada y bloquea la tabla durante todo el proceso. Las operaciones DML de escritura no son compatibles; solo se permiten las de lectura.

    Si no está seguro de que la modificación de VARCHAR cumpla estas condiciones, use ALGORITHM=INPLACE para ejecutar la operación DDL actual con el algoritmo INPLACE. Si la extensión rápida de columnas no es compatible, se devuelve un error de inmediato. Ejemplo:

    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.

    VARCHAR es un tipo de almacenamiento de longitud variable y el disco guarda únicamente la longitud real. Al usar campos VARCHAR, considere establecer la longitud máxima en 256 bytes o más desde el inicio. Así evitará que ampliar el campo después requiera el algoritmo COPY.

  3. La operación modifica únicamente los metadatos sin reconstruir toda la tabla cuando el tamaño de almacenamiento del tipo de dato no cambia y los elementos se agregan al final de ENUM o SET. En caso contrario, se requiere el algoritmo COPY para reconstruir la tabla.

PolarDB for MySQL 5.6

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una columna

Sí

No1

Sí1

No compatible

Eliminar una columna

Sí

Sí

No

No compatible

Cambiar el nombre de una columna

Sí

No

Sí

N/A

Reordenar columnas

Sí

Sí

No

No compatible

Establecer el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el comentario de una columna

Sí

No

Sí

N/A

Cambiar el tipo de una columna

No

Sí

No

No compatible

Aumentar la longitud de una columna VARCHAR

No

Sí

No

No compatible

Cambiar el juego de caracteres de UTF8mb3 a UTF8mb4

No

Sí

No

No compatible

Quitar el valor predeterminado de una columna

Sí

No

Sí

N/A

Modificar el valor de incremento automático

Sí

No

Sí

N/A

Cambiar una columna a NULL

Sí

Sí

No

No compatible

Cambiar una columna a NOT NULL

No

Sí

No

No compatible

Modificar la definición de una columna ENUM o SET

Sí

No

Sí2

N/A

  1. Para habilitar la función Instant column addition at the end of a table, establezca el parámetro loose_innodb_support_instant_add_column en ON. Esta función solo permite agregar una columna al final de la tabla. Si la tabla no tiene una clave primaria explícita, establezca el parámetro implicit_primary_key en OFF. De este modo se evita que la operación instantánea de agregar columna falle por la presencia de una columna de clave primaria implícita al final de la tabla. Además, esta operación no es compatible con tablas comprimidas (ROW_FORMAT=COMPRESSED), tablas con índices de texto completo, tablas temporales ni tablas particionadas. Cuando el clúster no admite la adición instantánea de columnas, agregar una columna ejecuta la instrucción DDL con el algoritmo INPLACE, lo cual requiere reconstruir toda la tabla. Durante esta reconstrucción se permiten lecturas y escrituras simultáneas.

    Nota

    PolarDB for MySQL La función de adición instantánea de columnas en 5.6 se encuentra en versión canary. Para usarla, vaya a Centro de cuotas, utilice Quota ID polardb_mysql_iac_56 para buscar el nombre de la cuota y haga clic en Apply en la columna Actions para habilitar la función.

  2. Esta operación modifica únicamente los metadatos sin reconstruir toda la tabla cuando el tamaño de almacenamiento del tipo de dato no cambia y los elementos se agregan al final de ENUM o SET. En caso contrario, se requiere el algoritmo COPY para reconstruir la tabla.

Operaciones de tablas

PolarDB for MySQL 8.0.2

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Cambiar ROW_FORMAT

Sí

Sí

No

Compatible

Cambiar KEY_BLOCK_SIZE

Sí

Sí

No

Compatible

Configurar estadísticas persistentes

Sí

No

Sí

N/A

Declarar un juego de caracteres

Sí

No

Sí

N/A

Convertir un juego de caracteres

No

Sí

No

No compatible

Optimizar una tabla

Sí

Sí

Nota

Cuando se utiliza ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE para desfragmentar una tabla, las tablas con índices de texto completo no admiten el algoritmo INPLACE.

No

Compatible

Reconstruir una tabla

Sí

Sí

No

Compatible

Cambiar el nombre de una tabla

Sí

No

Sí

N/A

Modificar el comentario de una tabla

Sí

No

Sí

N/A

Crear una tabla (CREATE TABLE)

\

\

Sí

N/A

PolarDB for MySQL 8.0.1

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Cambiar ROW_FORMAT

Sí

Sí

No

Compatible

Cambiar KEY_BLOCK_SIZE

Sí

Sí

No

Compatible

Configurar estadísticas persistentes

Sí

No

Sí

N/A

Declarar un juego de caracteres

Sí

No

Sí

N/A

Convertir un juego de caracteres

No

Sí

No

No compatible

Optimizar una tabla

Sí

Sí

Nota

Cuando se utiliza ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE para desfragmentar una tabla, las tablas con índices de texto completo no admiten el algoritmo INPLACE.

No

Compatible

Reconstruir una tabla

Sí

Sí

No

Compatible

Cambiar el nombre de una tabla

Sí

No

Sí

N/A

Modificar el comentario de una tabla

Sí

No

Sí

N/A

Crear una tabla (CREATE TABLE)

\

\

Sí

N/A

PolarDB for MySQL 5.7

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Cambiar ROW_FORMAT

Sí

Sí

No

No compatible

Cambiar KEY_BLOCK_SIZE

Sí

Sí

No

No compatible

Configurar estadísticas persistentes

Sí

No

Sí

N/A

Declarar un juego de caracteres

Sí

No

Sí

N/A

Convertir un juego de caracteres

No

Sí

No

No compatible

Optimizar una tabla

Sí

Sí

Nota

Cuando se utiliza ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE para desfragmentar una tabla, las tablas con índices de texto completo no admiten el algoritmo INPLACE.

No

Compatible

Reconstruir una tabla

Sí

Sí

No

Compatible

Cambiar el nombre de una tabla

Sí

No

Sí

N/A

Modificar el comentario de una tabla

Sí

No

Sí

N/A

Crear una tabla (CREATE TABLE)

\

\

Sí

N/A

PolarDB for MySQL 5.6

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Cambiar ROW_FORMAT

Sí

Sí

No

No compatible

Cambiar KEY_BLOCK_SIZE

Sí

Sí

No

No compatible

Configurar estadísticas persistentes

Sí

No

Sí

N/A

Declarar un juego de caracteres

Sí

No

Sí

N/A

Convertir un juego de caracteres

No

Sí

No

No compatible

Optimizar una tabla

Sí

Sí

Nota

Cuando se utiliza ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE para desfragmentar una tabla, las tablas con índices de texto completo no admiten el algoritmo INPLACE.

No

No compatible

Reconstruir una tabla

Sí

Sí

No

No compatible

Cambiar el nombre de una tabla

Sí

No

Sí

N/A

Modificar el comentario de una tabla

Sí

No

Sí

N/A

Crear una tabla (CREATE TABLE)

\

\

Sí

N/A

Cuando ejecute instrucciones CREATE TABLE de forma masiva, divídalas en lotes más pequeños y procéselas fuera de los horarios pico. Evite también las ventanas de operación y mantenimiento, como las ampliaciones de clúster. Una ejecución intensiva podría ocupar brevemente los recursos de bloqueo de metadatos (MDL), pero no afecta directamente los datos ni las cargas de trabajo existentes.

Operaciones con columnas generadas

PolarDB for MySQL 8.0.2

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una columna STORED

No

Nota

Agregar una expresión de columna STORED involucra la capa SQL/servidor, por lo que Online DDL no es compatible cuando se agrega una columna STORED.

Sí

No

No compatible

Reordenar columnas STORED

No

Sí

No

No compatible

Eliminar una columna STORED

Sí

Sí

No

Compatible

Agregar una columna VIRTUAL

Sí

No

Sí

N/A

Reordenar columnas VIRTUAL

No

Sí

No

No compatible

Eliminar una columna VIRTUAL

Sí

No

Sí

N/A

PolarDB for MySQL 8.0.1

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una columna STORED

No

Nota

Agregar una expresión de columna STORED involucra la capa SQL/servidor, por lo que Online DDL no es compatible cuando se agrega una columna STORED.

Sí

No

No compatible

Reordenar columnas STORED

No

Sí

No

No compatible

Eliminar una columna STORED

Sí

Sí

No

Compatible

Agregar una columna VIRTUAL

Sí

No

Sí

N/A

Reordenar columnas VIRTUAL

No

Sí

No

No compatible

Eliminar una columna VIRTUAL

Sí

No

Sí

N/A

PolarDB for MySQL 5.7

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una columna STORED

No

Nota

Agregar una expresión de columna STORED involucra la capa SQL/servidor, por lo que Online DDL no es compatible cuando se agrega una columna STORED.

Sí

No

No compatible

Reordenar columnas STORED

No

Sí

No

No compatible

Eliminar una columna STORED

Sí

Sí

No

Compatible

Agregar una columna VIRTUAL

Sí

No

Sí

N/A

Reordenar columnas VIRTUAL

No

Sí

No

No compatible

Eliminar una columna VIRTUAL

Sí

No

Sí

N/A

PolarDB for MySQL 5.6

PolarDB for MySQL 5.6 no admite columnas generadas.

Operaciones con claves externas

PolarDB for MySQL 8.0.2

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una clave externa

Sí1

No1

Sí1

N/A

Eliminar una clave externa

Sí1

No1

Sí1

N/A

PolarDB for MySQL 8.0.1

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una clave externa

Sí1

No1

Sí1

N/A

Eliminar una clave externa

Sí1

No1

Sí1

N/A

PolarDB for MySQL 5.7

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una clave externa

Sí1

No1

Sí1

N/A

Eliminar una clave externa

Sí1

No1

Sí1

N/A

PolarDB for MySQL 5.6

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar una clave externa

Sí1

No1

Sí1

N/A

Eliminar una clave externa

Sí1

No1

Sí1

N/A

El DDL INPLACE solo es compatible cuando foreign_key_checks está deshabilitado y únicamente se modifican los metadatos. En caso contrario, solo se admite el DDL COPY y la tabla permanece bloqueada durante todo el proceso.

Operaciones con tablas particionadas

PolarDB for MySQL 8.0.2

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar particiones (ADD)

Sí1

No2

Sí

No compatible

Eliminar particiones (DROP)

Sí1

No2

No

No compatible

Descartar espacios de tablas de particiones (DISCARD)

No

No

No

No compatible

Importar espacios de tablas de particiones (IMPORT)

No

No

No

No compatible

Truncar particiones (TRUNCATE)

Sí

No

No

No compatible

Fusionar particiones (COALESCE)

No

Sí3

No

No compatible

Redistribuir particiones (REORGANIZE)

Sí1

No7

No

No compatible

Intercambiar particiones (EXCHANGE)

Sí1

No

Sí

No compatible

Analizar particiones (ANALYZE)

Sí

No

No8

No compatible

Comprobar particiones (CHECK)

Sí

No

No9

No compatible

Optimizar particiones (OPTIMIZE)

Sí4

Sí4

No

Compatible4

Reconstruir particiones (REBUILD)

Sí1

No7

No

No compatible

Reparar particiones (REPAIR)

Sí

No10

No

No compatible

Convertir una tabla en una tabla particionada

No

Sí

Sí5

No compatible

Convertir una tabla particionada en una tabla normal

No

Sí

No

No compatible

Crear un PARTIAL INDEX

Sí

No6

No

Compatible

  1. Se introdujeron bloqueos de metadatos (MDL) a nivel de partición. Después de establecer el parámetro loose_partition_level_mdl_enabled en true, ejecutar una operación DDL no afecta el DML en las particiones que no están involucradas. Para obtener más información, consulte Online partition maintenance.

  2. Las particiones RANGE y LIST no requieren reconstruir la tabla al agregarlas o eliminarlas. Las particiones HASH y KEY sí necesitan reconstruir la tabla al agregarse, y no es posible eliminarlas.

  3. Solo se admiten particiones HASH y KEY.

  4. Cuando se ejecuta OPTIMIZE PARTITION en una tabla del motor InnoDB, se reconstruye toda la tabla particionada. Durante este proceso, se admiten las lecturas y escrituras en la tabla de destino. En este caso, establezca el parámetro innodb_parallel_build_primary_index en ON y utilice la función Parallel DDL para acelerar la reconstrucción.

  5. La conversión instantánea solo admite Convert a non-partitioned table into a range-partitioned table.

  6. PolarDB for MySQL permite crear y eliminar índices con granularidad de partición. Para obtener más información, consulte What is a partial index?.

  7. Redistribuir o reconstruir particiones solo reconstruye aquellas que requieren redistribución o reconstrucción de datos. El resto de las particiones no se ve afectado.

  8. Analizar una partición modifica únicamente las estadísticas, sin alterar los metadatos ni los datos de la tabla.

  9. Comprobar una partición no modifica los metadatos ni los datos.

  10. Reparar particiones reconstruye solo las que necesitan reparación.

PolarDB for MySQL 8.0.1

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar particiones (ADD)

No

No1

Sí

No compatible

Eliminar particiones (DROP)

No

No2

No

No compatible

Descartar espacios de tablas de particiones (DISCARD)

No

No

No

No compatible

Importar espacios de tablas de particiones (IMPORT)

No

No

No

No compatible

Truncar particiones (TRUNCATE)

Sí

No

No

No compatible

Fusionar particiones (COALESCE)

No

Sí

No

No compatible

Redistribuir particiones (REORGNIZATE)

No

No4

No

No compatible

Intercambiar particiones (EXCHANGE)

Sí

Sí

Sí

No compatible

Analizar particiones (ANALYZE)

Sí

Sí

No5

No compatible

Comprobar particiones (CHECK)

Sí

No

No6

No compatible

Optimizar particiones (OPTIMIZE)

Sí3

Sí3

No

Compatible3

Reconstruir particiones (REBUILD)

No

No4

No

No compatible

Reparar particiones (REPAIR)

Sí

No4

No

No compatible

Convertir una tabla en una tabla particionada

No

Sí

No

No compatible

Convertir una tabla particionada en una tabla normal

No

Sí

No

No compatible

  1. Las particiones RANGE y LIST no requieren reconstruir la tabla al agregarlas. Las particiones HASH y KEY sí necesitan reconstruir la tabla al agregarse.

  2. No es posible eliminar las particiones HASH y KEY.

  3. Cuando se ejecuta OPTIMIZE PARTITION en una tabla del motor InnoDB, se reconstruye toda la tabla particionada. Durante este proceso, se admiten las lecturas y escrituras en la tabla de destino. En este caso, establezca el parámetro innodb_parallel_build_primary_index en ON y utilice la función Parallel DDL para acelerar la reconstrucción.

  4. Redistribuir, reconstruir y reparar particiones solo reconstruye aquellas que requieren redistribución, reconstrucción o reparación. El resto de las particiones no se ve involucrado.

  5. Analizar una partición modifica únicamente las estadísticas, sin alterar los metadatos ni los datos de la tabla.

  6. Comprobar una partición no modifica los metadatos ni los datos.

PolarDB for MySQL 5.7

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar particiones (ADD)

No

No1

Sí

No compatible

Eliminar particiones (DROP)

No

No1

No

No compatible

Descartar espacios de tablas de particiones (DISCARD)

No

No

No

No compatible

Importar espacios de tablas de particiones (IMPORT)

No

No

No

No compatible

Truncar particiones (TRUNCATE)

Sí

No

No

No compatible

Fusionar particiones (COALESCE)

No

Sí

No

No compatible

Redistribuir particiones (REORGNIZATE)

No

No2

No

No compatible

Intercambiar particiones (EXCHANGE)

Sí

No

Sí

No compatible

Analizar particiones (ANALYZE)

Sí

No

No3

No compatible

Comprobar particiones (CHECK)

Sí

No

No4

No compatible

Optimizar particiones (OPTIMIZE)

No

Sí

No

No compatible

Reconstruir particiones (REBUILD)

No

No2

No

No compatible

Reparar particiones (REPAIR)

Sí

No2

No

No compatible

Convertir una tabla en una tabla particionada

No

Sí

No

No compatible

Convertir una tabla particionada en una tabla normal

No

Sí

No

No compatible

  1. Las particiones RANGE y LIST no requieren reconstruir la tabla al agregarlas o eliminarlas. Las particiones HASH y KEY sí necesitan reconstruir la tabla al agregarse, y no es posible eliminarlas.

  2. Redistribuir, reconstruir y reparar particiones solo reconstruye aquellas que requieren redistribución, reconstrucción o reparación. El resto de las particiones no se ve involucrado.

  3. Analizar una partición modifica únicamente las estadísticas, sin alterar los metadatos ni los datos de la tabla.

  4. Comprobar una partición no modifica los metadatos ni los datos.

PolarDB for MySQL 5.6

Operación

Permite DML concurrente

Reconstruye la tabla

Solo metadatos

Compatible con DDL paralelo

Agregar particiones (ADD)

No

No1

Sí

No compatible

Eliminar particiones (DROP)

No

No1

No

No compatible

Descartar espacios de tablas de particiones (DISCARD)

No

No

No

No compatible

Importar espacios de tablas de particiones (IMPORT)

No

No

No

No compatible

Truncar particiones (TRUNCATE)

Sí

No

No

No compatible

Fusionar particiones (COALESCE)

No

Sí

No

No compatible

Redistribuir particiones (REORGNIZATE)

No

No2

No

No compatible

Intercambiar particiones (EXCHANGE)

Sí

No

Sí

No compatible

Analizar particiones (ANALYZE)

Sí

No

No3

No compatible

Comprobar particiones (CHECK)

Sí

No

No4

No compatible

Optimizar particiones (OPTIMIZE)

No

Sí

No

No compatible

Reconstruir particiones (REBUILD)

No

No2

No

No compatible

Reparar particiones (REPAIR)

Sí

No2

No

No compatible

Convertir una tabla en una tabla particionada

No

Sí

No

No compatible

Convertir una tabla particionada en una tabla normal

No

Sí

No

No compatible

  1. Las particiones RANGE y LIST no requieren reconstruir la tabla al agregarlas o eliminarlas. Las particiones HASH y KEY sí necesitan reconstruir la tabla al agregarse, y no es posible eliminarlas.

  2. Redistribuir, reconstruir y reparar particiones solo reconstruye aquellas que requieren redistribución, reconstrucción o reparación. El resto de las particiones no se ve involucrado.

  3. Analizar una partición modifica únicamente las estadísticas, sin alterar los metadatos ni los datos de la tabla.

  4. Comprobar una partición no modifica los metadatos ni los datos.

Métodos de ejecución de DDL

  • Cuando PolarDB for MySQL ejecuta una operación DDL con el algoritmo INPLACE o INSTANT, el método del kernel (Online DDL) es la opción preferida. Este método se ejecuta rápidamente y ofrece alta estabilidad.

  • Cuando PolarDB for MySQL ejecuta una operación DDL con el algoritmo COPY, la tabla permanece bloqueada durante todo el proceso y no admite lecturas ni escrituras mientras se ejecuta. En este caso, considere utilizar una herramienta de terceros, como la función de cambio sin bloqueo de Data Management (DMS) o gh-ost. Estas herramientas permiten lecturas y escrituras durante la ejecución del DDL, aunque suelen ser más lentas. En tablas grandes o escenarios de alta concurrencia, la ejecución puede fallar si se acumulan demasiados datos incrementales.

A continuación se muestra una tabla que compara la ejecución de operaciones DDL mediante el método del kernel y con herramientas de terceros:

Método de ejecución

Permite lecturas y escrituras concurrentes

Velocidad de ejecución

Requiere registro binario

Aceleración paralela

Kernel (Online DDL)

Sí

Rápida

No

Compatible

Herramientas de terceros (cambio sin bloqueo de DMS, gh-ost, entre otras)

Sí

Lenta

Sí

No compatible

Nota

Incluso si utiliza una herramienta de terceros para ejecutar una operación DDL, se adquiere un bloqueo MDL-X durante el cambio de tabla (modificación de metadatos), lo que provoca un breve bloqueo de la tabla. Según sus necesidades, habilite la función Nonblocking DDL statements o la función Preemptive DDL para evitar el bloqueo de la tabla.

Contáctenos

Si tiene preguntas sobre las operaciones DDL, Contact us.