You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
功能
并行 DDL
复制全文
下载 pdf
并行 DDL
本文介绍云数据库 MySQL 版提供的并行 DDL 功能的相关信息。​
支持版本​
  • MySQL 5.7 版本,且内核小版本为 MySQL 5.7.44_20251015 及以上。​
  • MySQL 8.0 版本,不限内核小版本。​
  • MySQL 8.4 版本,且内核小版本为 MySQL 8.4.7_20260415 及以上。​
背景信息​
在社区 MySQL 5.7 中,创建一个索引需要经历扫描、排序、insert 和 flush 阶段,这个过程是单线程执行,耗时较长。​
在数据库业务执行期间,如果用户执行重建表或者创建索引的 DDL,使用 inplace 算法虽然不会阻塞业务执行 DML语句,但是在执行期间,业务需要额外的写入 row log,并且会消耗一定的 IO,对 SQL 延迟有一定的影响。而且执行时间太长,row log 积累太多,达到参数 innodb_online_alter_log_max_size 最大限制,也会导致 DDL 执行失败。因此,寻求快速执行 DDL 的方法是非常有必要的。​
特性说明​
在云数据库 MySQL 版提供的并行 DDL 功能中,允许在执行需要重建表的 DDL 的时候启动多个线程以索引为粒度并行地执行排序、insert 和 flush 操作。在创建单个索引的时候,允许启动多个线程并行地扫描主键索引,并且在排序阶段也能够并行地排序,充分利用多核优势。​
同时,对排序算法和 insert 阶段做了额外优化,使其单并发情况下也基本能和 MySQL 5.7 原生算法持平,在多并发下每个线程同等内存资源的情况下,可获得最高 2.3 倍的性能加速比。​
使用说明​
参数说明​
云数据库 MySQL 版为 MySQL 5.7 提供了多个可修改参数对并行 DDL 功能进行设置。在 MySQL 8.0 和 MySQL 8.4 中,并行 DDL 功能默认开启,无需修改参数即可使用。​
​
参数名称​
类型​
默认值​
是否需要重启以生效​
取值范围​
级别​
参数描述​
loose_innodb_parallel_ddl​
bool​
OFF​
否​
[ON/OFF]​
GLOBAL​
是否打开并行 DDL 功能​
loose_innodb_parallel_read_threads​
int​
4​
否​
[1, 256]​
GLOBAL/SESSION​
在并行 DDL 中,并行读主键索引的线程个数​
loose_innodb_ddl_buffer_size​
int​
1048576​
否​
[65536, 4294967295]​
GLOBAL/SESSION​
在并行 DDL 中,使用的最大内存字节数​
loose_innodb_ddl_threads​
​
int​
4​
否​
[1, 64]​
GLOBAL/SESSION​
并行 DDL 中,处理任务队列的最大线程数。在重建表的场景中,表示最大并行处理索引的最大线程数。在创建索引的场景中,表示最大并行排序的最大线程数。​
​
使用示例​
以下内容为在 MySQL 5.7 版本中使用并行 DDL 功能的方法。MySQL 8.0 和 MySQL 8.4 版本中并行 DDL 的使用方法与社区版本相同,可参考 MySQL 官方文档。​
  1. 修改参数 loose_innodb_parallel_ddl 为 ON。​
  1. 使用并行 DDL 创建索引。​
  • 设置 DDL 相关参数。​
​
SET SESSION loose_innodb_parallel_read_threads = 4;​
SET SESSION loose_innodb_ddl_buffer_size = 4*1048576;​
SET SESSION loose_innodb_ddl_threads = 4;​
​
  • 执行创建索引。​
​
CREATE INDEX <index_name> ON <table_name>(<column_name>);​
​
  1. 使用并行 DDL 执行重建表的 DDL。​
  • 设置 DDL 相关参数。​
​
SET SESSION loose_innodb_ddl_buffer_size = 4*1048576;​
SET SESSION loose_innodb_ddl_threads = 4;​
​
  • 执行以下语句。​
​
ALTER TABLE <table_name> ADD COLUMN <column_name> <column_type>, ALGORITHM=INPLACE;​
​
注意事项​
在 MySQL 5.7 和 MySQL 8.0 中使用并行 DDL 功能的注意事项与社区版本相同,可参考 MySQL 官方文档。​
性能数据​
测试环境​
32C64G 规格的实例,8GiB 的 Sysbench 数据,并且每个线程配置 4MiB 的 DDL buffer。​
测试结果​
  • 在社区版 MySQL 5.7 中,和在云数据库 MySQL 版 5.7 中不同并发数量下创建索引用时如下表所示。与原生 MySQL 5.7 版本执行 DDL 耗时结果如下。​
​
​
社区版 MySQL 5.7​
云数据库 MySQL 版 5.7​
​
​
​
​
​
​
无并发​
1 并发​
2 并发​
4 并发​
8 并发​
16 并发​
32 并发​
创建索引用时(秒)​
50.71​
51.80​
31.12​
25.08​
23.39​
21.85​
22.31​
​
  • 社区版 MySQL 5.7 和云数据库 MySQL 版 5.7 创建索引性能对比如下。​
​​​
​
最近更新时间:2026.10.09 18:07:11
这个页面对您有帮助吗?
有用
有用
无用
无用