前言
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
下面是实验结果,可以参考:文章来源:https://www.toymoban.com/news/detail-713379.html
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文章来源地址https://www.toymoban.com/news/detail-713379.html
到了这里,关于8.0 新特性 - innodb_ddl_threads的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!