DDL paralelo acelera la creación de índices en tablas grandes al distribuir el trabajo en varios hilos en lugar de uno solo. Cuando hay recursos de hardware disponibles, reduce el tiempo de ejecución de DDL y acorta la ventana durante la cual se bloquean las operaciones posteriores del lenguaje de manipulación de datos (DML).
Requisitos previos
Antes de empezar, asegúrese de contar con:
Un clúster de PolarDB for MySQL que cumpla los requisitos de versión que se indican a continuación
La creación de índices secundarios requiere una de las versiones del clúster que se indican a continuación:
PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.1.7 o posterior
PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.10 o posterior
PolarDB for MySQL 5.7, versión de revisión 5.7.1.0.7 o posterior
La creación de índices de clave principal requiere una de las versiones del clúster que se indican a continuación:
PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.2.9 o posterior
PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.31 o posterior
Para comprobar la versión del clúster, consulte Query the version number.
Limitaciones
DDL paralelo admite la creación de índices de clave principal y de índices secundarios. No admite:
Índices de texto completo
Índices espaciales
Índices secundarios en columnas virtuales
Impacto en los recursos
DDL paralelo aumenta el uso de hilos, lo que incrementa el consumo de CPU, memoria y E/S. Cuando establezca un número alto de hilos paralelos, la operación usa más memoria. Si la instancia se queda sin memoria, puede producirse un error de memoria insuficiente (OOM) y afectar la estabilidad del clúster. Ejecute DDL paralelo durante horas de baja actividad o cuando el clúster tenga recursos de hardware suficientes, para evitar afectar las operaciones SQL simultáneas.
Habilite DDL paralelo
Establezca el número de hilos para la creación de índices secundarios
El parámetro innodb_polar_parallel_ddl_threads controla cuántos hilos se ejecutan en paralelo para cada operación DDL.
Parámetro | Nivel | Descripción |
| Sesión | Número de hilos paralelos por operación DDL. Rango: 1–16. Predeterminado: 1 (un solo hilo). Establezca cualquier valor distinto de 1 para habilitar DDL paralelo en la creación de índices secundarios. Nota Cuando se establece en 1, el sistema sigue usando internamente dos hilos paralelos. |
Ejemplo:
-- Use 8 parallel threads for the current session
SET innodb_polar_parallel_ddl_threads = 8;
-- Create a secondary index using the configured thread count
ALTER TABLE t0 ADD INDEX idx_b (b);
Habilite la creación paralela de índices de clave principal
DDL paralelo para índices de clave principal requiere una activación de prueba adicional.
Para usar esta función, vaya a Quota Center. Busque la cuota con el Quota ID de polardb_mysql_pddl_for_pk y haga clic en Apply en la columna Actions para solicitar una prueba.
|
Parameter |
Level |
Description |
|
|
Global |
Controla si se permite DDL paralelo para la creación de índices de clave principal. Valores válidos: |
Optimice la fase de ordenación
Si el paralelismo de hilos predeterminado no cumple con sus requisitos de rendimiento, habilite sample sort para optimizar aún más la fase de ordenación.
|
Parameter |
Level |
Description |
|
|
Sesión |
Habilita la optimización de sample sort durante la creación de índices. Valores válidos: |
Ejemplo:
SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;
ALTER TABLE t0 ADD INDEX idx_b (b);
Optimice la fase de carga
Para acelerar aún más la construcción del árbol de índices, habilite la carga masiva paralela.
|
Parameter |
Level |
Description |
|
|
Sesión |
Habilita la optimización de carga masiva paralela para la creación del árbol de índices. Valores válidos: |
Ejemplo — las tres optimizaciones habilitadas:
SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;
SET innodb_polar_use_parallel_bulk_load = ON;
ALTER TABLE t0 ADD INDEX idx_b (b);
Prueba de rendimiento
Entorno de prueba
Clúster: Standard Edition de PolarDB for MySQL 8.0, 16 núcleos, 128 GB de memoria
Almacenamiento: 50 TB
Tabla de prueba
CREATE TABLE t0(
a INT PRIMARY KEY,
b INT) ENGINE=InnoDB;
Los datos de prueba se generaron mediante este procedimiento:
DELIMITER //
CREATE PROCEDURE populate_t0()
BEGIN
DECLARE i int DEFAULT 1;
WHILE (i <= $table_size) DO
INSERT INTO t0 VALUES (i, 1000000 * RAND());
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL populate_t0();
Reemplace $table_size por el número de filas, como 1000000. La prueba usa tablas con 1,000,000, 10,000,000, 100,000,000 y 1,000,000,000 de filas, además de una tabla de 1 TB generada con Sysbench. Para obtener detalles sobre la configuración de Sysbench, consulte Test tools.
Método de prueba
Cada prueba mide el tiempo necesario para crear un índice secundario en la columna b (tipo INT) en tablas de tamaño creciente, con innodb_polar_parallel_ddl_threads establecido en 1, 2, 4, 8, 16 y 32.
Resultados de la prueba
Los gráficos que aparecen a continuación muestran el factor de aceleración respecto al DDL de un solo hilo (número de hilos = 1) con tres combinaciones de parámetros.
Solo paralelismo de hilos (innodb_polar_parallel_ddl_threads):

Paralelismo de hilos + sample sort (innodb_polar_parallel_ddl_threads + innodb_polar_use_sample_sort):

Los tres parámetros (innodb_polar_parallel_ddl_threads + innodb_polar_use_sample_sort + innodb_polar_use_parallel_bulk_load):

Contáctenos
Si tiene alguna pregunta sobre las operaciones DDL, Contact us.
Recursos relacionados
Si tiene preguntas sobre las operaciones DDL, contact technical support.