前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Innodb存储引擎中的后台线程介绍

Innodb存储引擎中的后台线程介绍

作者头像
AsiaYe
发布2020-02-27 13:20:32
1.1K0
发布2020-02-27 13:20:32
举报
文章被收录于专栏:DBA随笔DBA随笔

//

Innodb存储引擎中的后台线程介绍

//

在Innodb存储引擎中,后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外它会将已经修改的数据文件刷新到磁盘文件中,保证数据库在发生异常的情况下,Innodb能够恢复到正常的运行状态。上一节中我们讲到了redo log的刷盘操作,其实就是后台线程帮忙完成的。

innodb存储引擎本身是多线程模型,因此,后台有多个不同的线程,它们各司其职,互相配合,完成内存池的刷新操作。

01

Master Thread

该线程是核心后台线程,主要负责将缓冲池中的数据一步刷新到磁盘,保证数据的一致性,它的工作包括:脏页的刷新、合并插入缓冲、undo页的回收等等。关于合并插入缓冲,如果大家感兴趣,可以查看之前写的一篇文章:

《Innodb存储引擎之插入缓冲

02

IO Thread

Innodb存储引擎中,使用了大量的Async IO操作,也就是异步IO操作,之所以异步,是因为IO操作耗时长,如果同步的话,影响数据库性能。IO线程主要负责处理这些IO请求的回调。IO线程包含read thread、write thread、insert buffer thread和Log Thread,在MySQL5.7.16版本中,read thread和write thread分别有4个,如下:

2 rows in set (0.00 sec)

代码语言:javascript
复制
mysql> show variables like "%innodb%io_threads%";
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_read_io_threads  | 4     |
| innodb_write_io_threads | 4     |
+-------------------------+-------+

可以使用show engine innodb status的语句来查看当前IO线程的工作状态:

代码语言:javascript
复制
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)

03

Purge Thread

事务提交之后,其所属的undo log废弃,因此需要Purge Thread来回收已经使用并分配的undo 页。早前的MySQL版本只支持一个Purge Thread,目前mysql 5.7版本支持多个Purge Thread,这样做的目的是为了进一步加快undo数据页的回收速度。

代码语言:javascript
复制
mysql> show variables like "%purge_threads%";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_purge_threads | 4     |
+----------------------+-------+
1 row in set (0.00 sec)

04

Page Cleaner Thread

Page Cleaner Thread的作用是将之前版本中的脏页刷新操作都放入到单独的线程中来完成,其目的是为了减轻原来的Master Thread的工作,同时可以缓解用户查询线程的阻塞,进一步提高Innodb 存储引擎的性能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档