mysql 8 多线程_MySQL8.0.14 - 新特性 - InnoDB Parallel Read简述

MySQL8.0.14引入了首个并行查询特性,支持在聚集索引上进行SELECT COUNT()和check table操作。通过Key_reader和Page_reader实现基于键值和物理页的分区,利用多线程并发处理,提高查询效率。文章介绍了并行查询的条件、流程及其实现细节。
摘要由CSDN通过智能技术生成

最近的MySQL8.0.14版本增加了其第一个并行查询特性,可以支持在聚集索引上做SELECT COUNT()和check table操作。本文简单的介绍下这个特性。

用法

要执行并行查询,需要满足如下条件(ref: row_scan_index_for_mysql)

无锁查询

聚集索引

不是Insert...select

需要参数设置为>1

相关代码

入口函数:

row_scan_index_for_mysql

parallel_select_count_star // for select count(*)

parallel_check_table // for check table

InnoDB里实现了两种查询方式,一种是基于key的(key reader), 根据叶子节点上的值做分区,需要判断可见性;另外一种是基于page的(physical read),根据page no来做分区,无需判断可见性。目前支持的两种查询都是key reader的方式。

使用如下代码创建一个reader,并调用接口函数,read()函数里的回调函数包含了如何对获取到的行数据进行处理:

Key_reader reader(prebuilt->table, trx, index, prebuilt, n_threads);

reader.read(func), 其中func是回调函数,用于告诉线程怎么处理得到的每一行

分区并计算线程数

分区入口:

template

typename Reader::Ranges Reader::partition()

流程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值