ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

观《MYSQL技术内内幕 InnoDB存储引擎 第2版》(2.5) —— Master Thread工作方式

2021-09-25 15:02:06  阅读:158  来源: 互联网

标签:Thread 缓冲 MYSQL InnoDB 刷新 磁盘 脏页 loop


Master Thread 是核心的后台线程。

InnoDB 1.0.x 版本之前(MySQL 5.1 之前): 

  Master Thread 具有最高的线程优先级别。内部由多个循环(loop)组成:主循环(loop)、后台循环(backgroup loop)、刷新循环(flush loop)、暂停循环(suspend loop)。Master Thread 根据 数据库运行状态进行切换。

  主循环(loop):大多数操作都在这个循环中,通过 thread sleep 实现每秒钟的操作和每10秒钟的操纵。

    每秒一次的操作:

      1.日志刷新到磁盘(总是)

      2.合并缓冲插入(会对前一秒的 IO 进行查询,小于5次 压力小,进行合并缓冲插入操作)

      3.最多刷新100个 InnoDB 缓冲池中的脏页到磁盘。(判断当前缓冲池中脏页比例(buf_get_modified_ratio_pct)是否超过文件中配置的(innodb_max_dirty_pages_pct,默认90),超过则进行操作)

      4.如果当前没有用户活动,切换到background loop。

    每10秒一次的操作:

      1.刷新100个脏页到磁盘(判断前10秒 IO操作是否少于200次,是则将100个脏页刷新到磁盘)

      2.合并最多5个插入缓冲(总是)

      3.将日志缓冲刷新到磁盘(总是)

      4.删除最多20个无用 undo 页(总是,执行pull perge操作,当 update 或 delete 时,原先的行被标记为删除,为了满足一致性读要求,判断事务系统中被修改的行能删除时,进行删除 )

      5.刷新100个或者10个脏页到磁盘(总是,如果缓冲池中脏页比例超过70%,刷新100个,若小于刷新10个)

  后台循环(background loop):当没有用户活动或数据库关闭后,切换到此线程。

    1.删除无用 undo 页(总是)

    2.合并20个插入缓冲(总是)

    3.跳回主循环(总是)

    4.不断刷新100个页直到符合条件(可能跳转到 刷新循环(flush loop)完成)

  当 刷新循环中 无事,InnoDB 会切换到 暂停循环,将 Master Thread 挂起,等待事件。

InnoDB 1.2.x 版本之前(MySQL 5.1 ~ 5.6):

  磁盘的发展,InnoDB 的一些规定限制了磁盘IO性能。

  引入配置 innodb_io_capacity ,表示磁盘IO吞吐量,默认200。合并插入缓冲时,数量是它的5%;缓冲区刷新脏页时,数量是它。

  修改 innodb_max_dirty_pages_pct,原默认值为90,只有缓冲池中的脏页比例超过90%,才进行刷新。修改默认值为75。

  引入配置 innodb_adaptive_flushing(自适应刷新),影响每秒刷新脏页的数量。不仅判断脏页比例,还会根据 重做日志的速度决定最合适的刷新脏页数量。

  引入配置 innodb_purge_batch_size,控制每次 full purge 回收的 undo 页数量。

InnoDB 1.2.x 版本(MySQL 5.6 及之后):

  从 Master Thread 中分离刷新脏页操作到 Purge Cleaner Thread。  

标签:Thread,缓冲,MYSQL,InnoDB,刷新,磁盘,脏页,loop
来源: https://www.cnblogs.com/mmql-bjz/p/15334388.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有