InnoDB 线程模型

InnoDB 线程模型

在这里插入图片描述

IO Thread

在 InnoDB 中使用了大量的 AIO(Async IO)来做读写处理,这样可以极大提高数据库的性能。在 InnoDB 1.0 版本之前共有 4 个 IO Thread,分别是 write、read、insert buffer 和 log thread,后来版本将 read thread 和 write thread 分别增大到了4个,一共有10个了。

  • read thread:

    负责读取操作将数据从磁盘加载到缓存 page 页(4个线程)

  • write thread:

    负责写操作,将缓存脏页刷新到磁盘(4个线程)

  • insert buffer thread:

    负责将写缓冲内容刷新到磁盘(1个线程)

  • log thread:

    负责将日志缓冲区刷新到磁盘(1个线程)

Purge Thread

事务提交之后,其使用的 undo 日志将不再需要,因此需要 Purge Thread 回收已经分配的 undo 页。

show variables like '%innodb_purge_threads%';

Page Cleaner Thread

作用是将脏数据刷新到磁盘,脏数据刷盘后相应的 redo log 也就可以覆盖,既可以同步数据,又能达到 redo log 循环使用的目的。会调用 write thread 线程处理。

show variables like '%innodb_page_cleaners%';

Master Thread

Master Thread 是 InnoDB 的主线程,负责调度其他各线程,优先级最高。

作用是将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。包含:

  • 脏页的刷新(page cleaner thread)
  • undo 页回收(purge thread)
  • redo 日志刷新(log thread)
  • 合并写缓冲等

其内部有两个主处理,分别是每隔 1 秒和 10 秒处理:

每隔 1s 的操作:

  • 刷新日志缓冲区,刷到磁盘
  • 合并写缓冲数据,根据 IO 读写压力来决定是否操作
  • 刷新脏页数据到磁盘,根据脏页比例达到 75% 才操作(innodb_max_dirty_pages_pctinnodb_io_capacity

每隔 10s 的操作:

  • 刷新脏页数据到磁盘
  • 合并写缓冲区数据
  • 刷新日志缓冲区
  • 删除无用的 undo 页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值