备注:测试数据库版本为MySQL 8.0
一.MySQL InnoDB并行查询介绍
MySQL经过多年的发展已然成为最流行的数据库,广泛用于互联网行业,并逐步向各个传统行业渗透。之所以流行,一方面是其优秀的高并发事务处理的能力,另一方面也得益于MySQL丰富的生态。MySQL在处理OLTP场景下的短查询效果很好,但对于复杂大查询则能力有限。最直接一点就是,对于一个SQL语句,MySQL最多只能使用一个CPU核来处理,在这种场景下无法发挥主机CPU多核的能力。MySQL没有停滞不前,一直在发展,新推出的8.0.14版本第一次引入了并行查询特性,使得check table和select count(*)类型的语句性能成倍提升。虽然目前使用场景还比较有限,但后续的发展值得期待。
InnoDB并行是通过设置参数innodb_parallel_read_threads来控制的。
官网innodb_parallel_read_threads参数的介绍:

二.MySQL 并行查询案例
因为我本地测试环境cpu只有4个,所以我分别测试1,2,4三个值。
测试记录:
mysql> set local innodb_parallel_read_threads = 1;
Query OK, 0 rows affected (0.01 sec)
mysql> select count(*) from fact_sale;
+-----------+
| count(*) |
+-----------+
| 767830001 |
+-----------+
1 row in set (2 min 20.05 sec)
mysql> set local innodb_parallel_read_threads = 2;
Query OK, 0 rows affected (0.01 sec)
mysql> select count(*) from fact_sale;
+-----------+
| count(*) |
+-----------+
| 767830001 |
+-----------+
1 row in set (1 min 33.54 sec)
mysql> set local innodb_parallel_read_threads = 4;
Query OK, 0 rows affected (0.00 sec)
mysql> select count(*) from fact_sale;
+-----------+
| count(*) |
+-----------+
| 767830001 |
+-----------+
1 row in set (1 min 2.12 sec)
参考:
- https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_parallel_read_threads
- https://blog.csdn.net/weixin_30421043/article/details/113285267
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




