如何触发Mysql并行查询功能启动?

问题描述 投票:0回答:1

MySQL 8.0.19

mysql> show variables like 'innodb_parallel_read_threads';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_parallel_read_threads | 4     |
+------------------------------+-------+
1 row in set (0.00 sec)

从执行计划来看,尽管成本值很高,但它不会触发并行查询。

mysql> explain analyze SELECT count(a.name) FROM b,a WHERE b.id = a.id AND a.id < 10000\G
*************************** 1. row ***************************
EXPLAIN: -> Aggregate: count(a.`name`)  (actual time=79199.970..79199.971 rows=1 loops=1)
    -> Inner hash join (b.id = a.id)  (cost=29804029261222.55 rows=29803521726988) (actual time=52129.791..79198.823 rows=9999 loops=1)
        -> Table scan on b  (cost=31.81 rows=18758239) (actual time=0.385..19630.712 rows=20000000 loops=1)
        -> Hash
            -> Filter: (a.id < 10000)  (cost=4909601.51 rows=15888229) (actual time=2.266..52117.583 rows=9999 loops=1)
                -> Table scan on a  (cost=4909601.51 rows=47669458) (actual time=2.262..48985.413 rows=50000000 loops=1)

1 row in set (1 min 19.25 sec)
mysql parallel-processing explain
1个回答
0
投票

当前并行读取的用例非常有限。而documentation

innodb_parallel_read_threads

定义可用于并行聚集索引读取的线程数。从MySQL 8.0.17开始,支持并行扫描分区。并行读取线程可以提高CHECK TABLE性能。

有点含糊,feature documentation更详细地描述了当前用例:

FR1:从表T中选择COUNT(*);仅当扫描是非锁定扫描并且--innodb-parallel-read-threads> 1时,才会并行扫描索引。否则,它将回退到旧的逐行扫描。

FR2:CHECK TABLE T的第二阶段;也将进行并行扫描。

FR3:支持MVCC语义。

FR4:新的会话级变量--innodb-parallel-read-threads,用于控制用于并行SELECT COUNT(*)...的线程数;

  1. 最小值1
  2. 默认值4
  3. 最大值256。

NFR1:对于SELECT COUNT(*)FROM t,加速应为10倍;在相关的硬件(例如,tetra02)上。

简而言之:您应该只对select count(*) from table有所改进(没有任何where条款)。执行计划中也不会提及它,您目前只能通过将执行时间与innodb_parallel_read_threads的不同值进行比较来查看效果。

[这是一个新功能,在目前的状态下基本上是laying the groundwork,用于将来的开发:

当前范围仅限于为DDL操作提供足够的基础结构以并行读取数据。现在,使CHECK TABLE的第二阶段并行是一个额外的好处。这样可以加快CHECK TABLE的速度。

开发人员将测试并逐步扩展此功能(例如,MySQL 8.0.17添加了对分区表的支持,并且似乎正在进行对二级索引的支持),但是可能需要一段时间,直到您的查询能够使用它。

© www.soinside.com 2019 - 2024. All rights reserved.