Este tema describe la función DDL más rápido, que proporciona un mecanismo optimizado de gestión del buffer pool. Este mecanismo permite reducir el impacto de las operaciones de lenguaje de definición de datos (DDL) y aumentar el número de operaciones DDL simultáneas permitidas.
Requisitos previos
Su instancia RDS ejecuta una de las siguientes versiones de MySQL:
MySQL 8.0 (con a minor engine version de 20200630 o posterior).
MySQL 5.7 (con a minor engine version de 20200630 o posterior).
MySQL 5.6 (con a minor engine version de 20200630 o posterior).
Contexto
Las operaciones DDL son comunes en las instancias RDS. Al usar su instancia RDS, es posible que encuentre problemas relacionados con estas operaciones. Por ejemplo, podría enfrentar las siguientes situaciones:
¿Por qué se produce una fluctuación de rendimiento al agregar índices que interrumpe las operaciones de lectura y escritura en su instancia RDS?
¿Por qué una operación DDL en una tabla de menos de 1 GB tarda más de 10 minutos en completarse?
¿Por qué ocurre una fluctuación de rendimiento cuando se cierra una conexión que genera tablas temporales?
El equipo del motor de base de datos de ApsaraDB for RDS ha realizado análisis exhaustivos y pruebas intensivas para identificar estos problemas. Con base en los resultados, el equipo detectó defectos en la lógica de mantenimiento de caché que gestiona las operaciones DDL. Para solucionar estos problemas, se desarrolló la función DDL más rápido. El mecanismo optimizado de gestión del buffer pool que ofrece esta función reduce la contención de bloqueos desencadenada por las operaciones DDL. Esto garantiza el rendimiento de su instancia RDS durante las operaciones DDL cuando procesa una carga de trabajo normal.
Habilitar DDL más rápido
Habilite la función DDL más rápido al configurar el parámetro loose_innodb_rds_faster_ddl como ON en la consola de ApsaraDB for RDS. Para obtener más información, consulte Modify instance parameters.
Pruebas con operaciones DDL
-
Escenario de prueba
Use el algoritmo in-place para ejecutar operaciones DDL en línea mediante las siguientes instrucciones compatibles con MySQL 8.0: CREATE INDEX y OPTIMIZE TABLE. La instrucción CREATE INDEX crea un índice en una tabla sin necesidad de reconstruirla. La instrucción OPTIMIZE TABLE crea un índice en una tabla y requiere su reconstrucción.
Operación
Instant
In-place
Reconstruye la tabla
Permite operaciones DML simultáneas
Solo modifica metadatos
CREATE INDEX
No
Yes
No
Yes
No
OPTIMIZE TABLE
No
Yes
Yes
Yes
No
-
Instancia de prueba
La instancia RDS usada para la prueba ejecuta MySQL 8.0. Cuenta con 8 núcleos de CPU y 64 GB de memoria. La tabla sobre la que se ejecutan las operaciones DDL tiene un tamaño de 600 MB.
-
Procedimiento de prueba
Use SysBench para realizar una prueba de estrés. En esta prueba, ejecute operaciones DDL en línea y compare los resultados obtenidos.
-
Resultado de la prueba
Operación
Duración promedio de ejecución (sin DDL más rápido)
Duración promedio de ejecución (con DDL más rápido)
Factor de mejora de rendimiento
CREATE INDEX
56 segundos
4.9 segundos
11.4
OPTIMIZE TABLE
220 segundos
17 segundos
12.9
-
Resumen de la prueba
La función DDL más rápido permite que ApsaraDB RDS for MySQL con AliSQL reduzca la duración de ejecución de una operación DDL en más del 90% en comparación con MySQL Community Edition.
Pruebas con tablas temporales
Las tablas temporales son comunes en MySQL. Por ejemplo, el sistema crea tablas temporales para consultar tablas de la base de datos information_schema o para acelerar la ejecución de instrucciones SQL complejas. Cuando un hilo finaliza, se eliminan todas las tablas temporales asociadas. Esto constituye un tipo específico de operación DDL que provoca fluctuaciones de rendimiento en su instancia RDS. Para obtener más información, consulte Temp ibt tablespace truncation at disconnection stuck InnoDB under large BP.
-
Instancia de prueba
La instancia RDS usada para la prueba ejecuta MySQL 8.0. Cuenta con 8 núcleos de CPU y 64 GB de memoria.
-
Procedimiento de prueba
Use tpcc-mysql para realizar una prueba de estrés. Durante la prueba, ejecute consultas para asegurar que el buffer pool alcance casi su capacidad máxima. Posteriormente, inicie solicitudes de un solo hilo a través de conexiones de corta duración para generar tablas temporales.
-
Resultado de la prueba
Elemento de comparación
Sin operaciones DDL
Con DDL más rápido habilitado
Con DDL más rápido deshabilitado
Transacciones por segundo (TPS)
42,000
40,000
< 10,000
La siguiente figura muestra los datos de rendimiento por segundo obtenidos de la prueba de estrés. Las partes resaltadas en rojo indican las TPS que admite la instancia RDS cuando la función DDL más rápido está deshabilitada.

-
Resumen de la prueba
Cada vez que finaliza un hilo que genera tablas temporales, MySQL nativo provoca una fluctuación severa de rendimiento. Esta fluctuación reduce las TPS en más del 70%. Tras habilitar la función DDL más rápido, la disminución de TPS se reduce al 5%.
Efecto de la optimización
La función DDL más rápido es compatible con MySQL 5.6, 5.7 y 8.0. Sin embargo, las operaciones DDL admitidas pueden variar según la versión de MySQL seleccionada.
| Categoría | Operación DDL | MySQL 5.6 | MySQL 5.7 | MySQL 8.0 |
| DDL in-place | Para obtener más información, consulte MySQL 8.0 Online DDL Operations y MySQL 5.7 Online DDL Operations. | No | Yes | Yes |
| Gestión de tablespaces | Habilita o deshabilita el cifrado del tablespace. | No | Yes | Yes |
| Libera o elimina un tablespace. | No | Yes | Yes | |
| Descarta un tablespace. | Yes | Yes | Yes | |
| Eliminación de tablas | Libera o elimina una tabla. | Yes | Yes | Yes |
| Operación Undo | Libera o elimina un tablespace de undo. | No | No | Yes |
| Actualización de tabla | Actualiza una tabla y sus páginas sucias. | Yes | Yes | Yes |
Defectos corregidos por DDL más rápido
La función DDL más rápido corrige los siguientes defectos: