前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL五:InnoDB线程模型

MySQL五:InnoDB线程模型

作者头像
云扬四海
发布2022-09-26 15:53:55
3880
发布2022-09-26 15:53:55
举报
文章被收录于专栏:云扬四海

转载~

一、InnoDB线程模型的组成

在Innodb存储引擎中,后台线程的主要作用是「负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据」。此外它会将已经修改的数据文件刷新到磁盘文件中,保证在发生异常的情况下,Innodb能够恢复到正常的运行状态。

图片
图片

「InnoDB存储引擎是多线程的模型,所以有多个不同的后台线程,负责处理不同的任务」。主要有:

Master Thread、IO Thread、Purge Thread、Page Cleaner Thread四种。

图片
图片

二 Master Thread

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

  • 「主要作用」 将缓冲池中的数据一步刷新到磁盘,保证数据的一致性。
  • 「主要工作」 脏页的刷新(page cleaner thread)、undo页回收(purge thread)、redo日志刷新(log thread)、合并写缓冲等。

Master thread内部有两个主要处理时机,分别是每隔1秒和10秒处理。

  • 每隔1秒
    • innodb_max_dirty_pages_pct
    • innodb_io_capacity 合并插入缓冲时,每秒合并插入缓冲的数量为 innodb_io_capacity值的5%,默认就是 200*5%=10 在从缓冲区刷新脏页时,每秒刷新脏页的数量就等于innodb_io_capacity的值,默认200
    • 刷新日志缓冲区,刷到磁盘
    • 合并写缓冲区数据,根据IO读写压力来决定是否操作
    • 刷新脏页数据到磁盘,根据脏页比例达到75%才操作,此处涉及两个参数 脏页比例通过innodb_max_dirty_pages_pct配置,innodb_max_dirty_pages_pct参数值保存在变量srv_max_buf_pool_modified_pct 里面,这是一个全局变量,初始值为 75.0
  • 每隔10秒
    • 刷新脏页数据到磁盘
    • 合并写缓冲区数据
    • 刷新日志缓冲区
    • 删除无用的undo页

三、 IO Thread

「为了提高数据库的性能,在InnoDB中使用了大量的AIO(Async IO)来做读写处理」

一共有4种总共10个IO Thread:

「read thread」(4个)

负责读取操作,将数据从磁盘加载到Buffer Pool的Page页。

「write thread」(4个)

负责写操作,将Buffer Pool的dirty page刷新到磁盘。

代码语言:javascript
复制
 show variables like "%innodb%io_threads%";
图片
图片

「log thread」(1个)

负责将Log Buffer内容刷新到磁盘。

「insert buffer thread」(1个)

负责将Change Buffer内容刷新到磁盘。

代码语言:javascript
复制
#查看当前IO线程的工作状态
show engine innodb status;
图片
图片

四 Purge Thread

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

早前的版本只支持一个Purge Thread,目前mysql 5.7版本支持多个Purge Thread,目的是为了进一步加快undo数据页的回收速度。

代码语言:javascript
复制
show variables like '%innodb_purge_threads%';
图片
图片

五 Page Cleaner Thread

「作用是将脏数据放入到单独的线程中刷新到磁盘,脏数据刷盘后相应的redo log也就可以覆盖,即可以同步数据,又能达到redo log循环使用的目的」

减轻原来的Master Thread的工作,同时可以缓解用户查询线程的阻塞,进一步提高Innodb 存储引擎的性能。

代码语言:javascript
复制
 show variables like '%innodb_page_cleaners%';
图片
图片
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、InnoDB线程模型的组成
  • 二 Master Thread
  • 三、 IO Thread
  • 四 Purge Thread
  • 五 Page Cleaner Thread
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档