MYSQL-InnoDB的线程模型

今天和大家分享InnoDB的线程模型相关知识

在MYSQL中,有很多的线程,主要作用是负责刷新chang buffer、buffer pool、log buffer等内存池中的数据,将磁盘上的数据页加载到内存当中,并且保持磁盘中的数据是最新的状态,另外在内存当中对数据进行修改之后,需要将脏页进行刷盘操作,还有数据库发生异常,需要进行数据回滚操作等等,都是通过后台线程进行处理的,下面就和大家介绍主要的相关线程。

在这里插入图片描述
InnoDB线程主要分为四种,分别是Master Thread、IO Thread、Purge Thread、Page Cleaner Thread。

1. IOThread

作用: 主要是用做读写处理
我们可以通过命令show engine innodb status;来查看读写线程的相关状态,执行之后的数据页面如下:
在这里插入图片描述
read Thread: 负责读取操作,将数据从磁盘加载到内存中page页中(有4个)
write Thread: 负责写操作,将脏页刷新到磁盘(有4个)
log Thread: 负责将日志缓冲区内容刷新到磁盘(有1个)
insert buffer Thread: 负责将写缓冲区内容刷新到磁盘(有1个)

2. Purge Thread

作用: 用于事务提交之后回收undo页
我们可以通过命令%innodb_purge_threads%;来查看该线程的数量,执行之后的页面如下:
在这里插入图片描述
我们可以看到,默认设置的purge thread的数量是4个,这样可以更快的回收undo页。

3. Page Cleaner Thread

作用: 将脏数据刷新到磁盘
我们可以通过命令%innodb_page_cleaners%;来查看该线程的数量,默认是1。
注意: page cleaner thread其实是会调用write thread线程来进行写操作

4. Master Thread

作用: InnoDB的主线程,负责调用其他的线程,优先级最高。
该线程会定时处理数据,每一秒会执行一些操作,每十秒也会执行一些操作,具体执行哪些操作呢?

每一秒的操作:

1.刷新脏页数据到磁盘,根据脏页比例达到75%才操作。我们可以通过命令show variables like 'innodb_max_dirty_pages_pct;'来查看刷新脏页百分比配置,执行命令后的页面如下:
在这里插入图片描述
那么达到刷新比例要求,会刷新多少脏页数据到磁盘呢,我们可以通过show innodb_io_capacity;命令查看刷新容量大小:
在这里插入图片描述
默认是200

2.合并写缓冲区数据:如果一秒的IO次数小于5,认为IO的压力较小,可以执行合并缓冲区的操作(可能会做)。

3.刷新日志缓冲区:即使事务没有提交,InnoDB也会每秒将重做日志缓冲区的内容刷新到重做日志文件中。(一定会做)

每10秒的操作:

1.刷新脏页数据到磁盘,刷新的脏页数量为innodb_io_capacity(可能会做)
2.合并写缓冲区的数据,合并写缓冲区的大小是innodb_io_capacity的5%(一定会做)
3.刷新日志缓冲区(一定会做)
4.删除无用的undo页(一定会做)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值