8.0 新特性 - innodb_ddl_threads

前言

MySQL 8.0.27 引入了一个新变量来控制 InnoDB 可用于创建(排序和构建)二级索引的最大并行线程数:innodb_ddl_threads 通过调整该参数,可以提升二级索引的创建速度。

参数介绍

1. innodb_ddl_threads

创建二级索引时,在排序和构建阶段,使用线程的个数,一定程度上可以加快索引的创建速度,默认为 4 个。

2. innodb_ddl_buffer_size

默认为 1 MB,该参数是避免开启很多线程后,由于内存不足导致加索引失败。

3. innodb_parallel_read_threads

默认为 4,并行读取聚簇索引的线程数,可以提升 check table 速度。

4. innodb_online_alter_log_max_size

该参数是 online DDL 中的参数,如果变更期间依然有业务请求,可能会产生大量的变更日志 innodb_ddl_threads 的使用场景肯定也是大表加索引,变更持续时间可能会更长,所以需要注意该参数的大小,如果过小会导致 DDL 变更失败,当然是在线变更的场景下。

测试结果

可以使用 mysql_random_data_load 造一张大表:

mysql_random_data_load -h127.0.0.1 -u'root' -p --max-threads=10 test test_index 100000000

下面是实验结果,可以参考:

ddl buffer size ddl threads parallel read theads execution time
1048576 4 4 9 min 0.6838 sec
104857600 8 8 4 min 8.3601 sec
1048576000 8 8 3 min 9.1862 sec
1048576000 16 16 3 min 7.4079 sec
1048576000 16 8 3 min 4.1161 sec
1048576000 12 4 3 min 8.7854 sec
1048576000 4 12 3 min 5.9497 sec
1048576000 4 4 3 min 12.2435 sec
2097152000 4 4 2 min 43.6280 sec
2097152000 8 8 2 min 44.6516 sec

参考资料:https://dev.mysql.com/doc/refman/8.0/en/online-ddl-parallel-thread-configuration.html

你可能感兴趣的:(MySQL,mysql,数据库,MySQL)