innodb_max_dirty_pages_pct 是 MySQL InnoDB 存储引擎非常重要的一个参数,用来控制buffer pool中脏页的百分比,当脏页数量占比超过这个参数设置的值时,InnoDB会启动刷脏页的操作。该参数只控制脏页百分比,并不会影响刷脏页的速度。

innodb_max_dirty_pages_pct 参数可以动态调整,最小值为0, 最大值为99.99,默认值为 75。

innodb_max_dirty_pages_pct参数源码解析

源码版本:5.7.19

(1)保存脏页百分比的变量

在InnoDB源码中,innodb_max_dirty_pages_pct参数值保存在变量srv_max_buf_pool_modified_pct 里面,这是一个全局变量,初始值为 75.0,如下:

double      srv_max_buf_pool_modified_pct = 75.0;

(2)刷脏页的线程

InnoDB刷脏页主要通过两类线程来实现,这两类线程分别是:

buf_flush_page_cleaner_coordinator,协调线程

buf_flush_page_cleaner_worker,工作线程

协调线程中有一个while循环,每1秒执行一次脏页百分比的检查,当脏页百分比超过阈值,触发事件,唤醒工作线程,执行刷脏页的操作。

os_event_set(page_cleaner->is_requested);

工作线程中有一个while循环,主要在等待刷脏页的事件,如果事件被触发,工作线程就会执行刷脏页的操作,刷完脏页之后,继续等待事件,等待下一次被唤醒。

os_event_wait(page_cleaner->is_requested);

(3)函数调用关系

协调线程通过调用一系列的函数,来获取脏页百分比,判断是否需要刷脏页,函数调用关系如下:

buf_flush_page_cleaner_coordinator()

page_cleaner_flush_pages_recommendation()

af_get_pct_for_dirty()

(4)af_get_pct_for_dirty()函数的实现

af_get_pct_for_dirty() 函数调用buf_get_modified_ratio_pct()获取已修改页的百分比,然后与srv_max_dirty_pages_pct_lwm及srv_max_buf_pool_modified_pct变量进行比较,最终返回一个0~100的值,给上层调用函数,来决定是否需要刷脏页。af_get_pct_for_dirty()函数具体实现如下:

static

ulint

af_get_pct_for_dirty()

/*==================*/

{

doubledirty_pct = buf_get_modified_ratio_pct();

if (dirty_pct == 0.0) {

/* No pages modified */

return(0);

}

ut_a(srv_max_dirty_pages_pct_lwm

<= srv_max_buf_pool_modified_pct);

if (srv_max_dirty_pages_pct_lwm == 0) {

/* The user has not set the option to preflush dirty

pages as we approach the high water mark. */

if (dirty_pct >= srv_max_buf_pool_modified_pct) {

/* We have crossed the high water mark of dirty

pages In this case we start flushing at 100% of

innodb_io_capacity. */

return(100);

}

} else if (dirty_pct >= srv_max_dirty_pages_pct_lwm) {

/* We should start flushing pages gradually. */

return(static_cast((dirty_pct * 100)

/ (srv_max_buf_pool_modified_pct + 1)));

}

return(0);

}

(5)其他触发刷脏页的场景

除了脏页百分比达到阈值innodb_max_dirty_pages_pct触发刷脏页以外,还有很多条件,也会触发刷脏页,主要包括:

REDO日志快满的时候。

为了保证MySQL中的空闲页面的数量,会从LRU 链表尾部淘汰一部分页面作为空闲页。如果对应的页面是脏页的话,就需要先将页面刷到磁盘。

MySQL实例正常关闭时候。

mysql innodbmaxdirtypagespct_MySQL参数解析innodb_max_dirty_pages_pct相关推荐

  1. MySQL参数解析innodb_max_dirty_pages_pct

    innodb_max_dirty_pages_pct 是 MySQL InnoDB 存储引擎非常重要的一个参数,用来控制buffer pool中脏页的百分比,当脏页数量占比超过这个参数设置的值时,In ...

  2. MySQL核心参数含义的源码解析

    引言 你访问的网站,大部分使用Apache服务器;你访问的网站,大部分使用Linux或BSD操作系统:你访问的网站,大部分使用MySQL数据库;你提交DNS域名查询请求大多由BIND服务器分析处理;你 ...

  3. MySQL配置参数大全

    名称 是否需要重启 值 允许值 描述 auto_increment_increment 否 1 1-65,535 auto_increment_increment和auto_increment_off ...

  4. mysql启动参数(/etc/my.cnf)详解汇总

    mysql启动参数(/etc/my.cnf)详解汇总 MYSQL–my.cnf配置中文详解 basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = ...

  5. MySql配置参数详解

    #*** client options 相关选项 ***# #以下选项会被MySQL客户端应用读取.注意只有MySQL附带的客户端应用程序保证可以读取这段内容.如果你想你自己的MySQL应用程序获取这 ...

  6. SpringMVC源码之参数解析绑定原理

    摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...

  7. mysql参数配置详情_MySQL配置文件mysql.ini参数详解、MySQL性能优化

    类型:数据库类大小:1.7M语言:英文 评分:6.6 标签: 立即下载 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini ...

  8. MySQL相关参数配置及性能优化

    MySQL及其优化 文章目录 MySQL及其优化 数据库相关概念 事务的四大特性ACID 影响mysql数据库性能的几个方面 数据库性能优化的重点 CentOS系统参数优化 内核相关参数(/etc/s ...

  9. MySQL学习笔记之innodb_max_dirty_pages_pct

    innodb_max_dirty_pages_pct, innodb_max_dirty_pages_pct 参数可以动态调整,最小值为0, 最大值为99.99,默认值为 75. 这个百分比是,最大脏 ...

最新文章

  1. 这样就算会了PHP么?-10
  2. Codeforces 864 A Fair Game 水题
  3. python拷贝文件夹目录和文件_Python 拷贝文件及文件夹到远程主机目录
  4. java ef 引用问题_java调用shell(ps -ef | grep )问题
  5. Linux系统文件属性,什么是Linux系统的文件属性?
  6. centos odbc mysql_Centos下安装并配置ODBC连接MySQL 【转】
  7. activiti5第二弹----使用activiti5提供的测试类进行测试
  8. RoI Pooling 系列方法介绍(文末附源码)
  9. django 1.8 官方文档翻译: 3-6-1 中间件概览
  10. 总结开发Silverlight项目准则 [转]
  11. 大数据-Redis基础
  12. 巴比特 | 元宇宙每日必读:入职三个月就遭遣散,热潮过后的元宇宙会走向哪里?...
  13. 存储IP地址,到底用什么数据类型相对比较好
  14. python数据分析师 前景_数据分析师的前景怎么样? 本人是程序员,最近对数据分析有兴趣……...
  15. 录屏时如何录制麦克风声音?-QVE屏幕录制
  16. timeit.Timer()与timeit.timeit()
  17. JAVA输出字符串中字母_Java输出字符串中的大写英文字母数,小写英文字母数以及非英文字母的三种方法...
  18. 用vim编辑时怎么复制粘贴外部内容(在ubuntu操作系统中)
  19. 有序数组二分查找最接近的值
  20. “记忆力争夺战”走向尾声,“潜意识记忆营销”将成破局利器

热门文章

  1. python 直接if判断和is not None的区别
  2. LeetCode简单题之三角形的最大周长
  3. CodeGen融合核心扩展定制文件
  4. 2020年Yann Lecun深度学习笔记(上)
  5. 2021年大数据HBase(十五):HBase的Bulk Load批量加载操作
  6. Python的输出:Python2.7和Python3.7的区别
  7. 零起点学算法01——第一个程序Hello World!
  8. java类安卓app 简介_android.app.Activity 的介绍
  9. Android TextView textAppearance
  10. Installation error: INSTALL_FAILED_VERSION_DOWNGRADE