mysql innodbmaxdirtypagespct_MySQL参数解析innodb_max_dirty_pages_pct
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相关推荐
- MySQL参数解析innodb_max_dirty_pages_pct
innodb_max_dirty_pages_pct 是 MySQL InnoDB 存储引擎非常重要的一个参数,用来控制buffer pool中脏页的百分比,当脏页数量占比超过这个参数设置的值时,In ...
- MySQL核心参数含义的源码解析
引言 你访问的网站,大部分使用Apache服务器;你访问的网站,大部分使用Linux或BSD操作系统:你访问的网站,大部分使用MySQL数据库;你提交DNS域名查询请求大多由BIND服务器分析处理;你 ...
- MySQL配置参数大全
名称 是否需要重启 值 允许值 描述 auto_increment_increment 否 1 1-65,535 auto_increment_increment和auto_increment_off ...
- mysql启动参数(/etc/my.cnf)详解汇总
mysql启动参数(/etc/my.cnf)详解汇总 MYSQL–my.cnf配置中文详解 basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = ...
- MySql配置参数详解
#*** client options 相关选项 ***# #以下选项会被MySQL客户端应用读取.注意只有MySQL附带的客户端应用程序保证可以读取这段内容.如果你想你自己的MySQL应用程序获取这 ...
- SpringMVC源码之参数解析绑定原理
摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...
- mysql参数配置详情_MySQL配置文件mysql.ini参数详解、MySQL性能优化
类型:数据库类大小:1.7M语言:英文 评分:6.6 标签: 立即下载 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini ...
- MySQL相关参数配置及性能优化
MySQL及其优化 文章目录 MySQL及其优化 数据库相关概念 事务的四大特性ACID 影响mysql数据库性能的几个方面 数据库性能优化的重点 CentOS系统参数优化 内核相关参数(/etc/s ...
- MySQL学习笔记之innodb_max_dirty_pages_pct
innodb_max_dirty_pages_pct, innodb_max_dirty_pages_pct 参数可以动态调整,最小值为0, 最大值为99.99,默认值为 75. 这个百分比是,最大脏 ...
最新文章
- 这样就算会了PHP么?-10
- Codeforces 864 A Fair Game 水题
- python拷贝文件夹目录和文件_Python 拷贝文件及文件夹到远程主机目录
- java ef 引用问题_java调用shell(ps -ef | grep )问题
- Linux系统文件属性,什么是Linux系统的文件属性?
- centos odbc mysql_Centos下安装并配置ODBC连接MySQL 【转】
- activiti5第二弹----使用activiti5提供的测试类进行测试
- RoI Pooling 系列方法介绍(文末附源码)
- django 1.8 官方文档翻译: 3-6-1 中间件概览
- 总结开发Silverlight项目准则 [转]
- 大数据-Redis基础
- 巴比特 | 元宇宙每日必读:入职三个月就遭遣散,热潮过后的元宇宙会走向哪里?...
- 存储IP地址,到底用什么数据类型相对比较好
- python数据分析师 前景_数据分析师的前景怎么样? 本人是程序员,最近对数据分析有兴趣……...
- 录屏时如何录制麦克风声音?-QVE屏幕录制
- timeit.Timer()与timeit.timeit()
- JAVA输出字符串中字母_Java输出字符串中的大写英文字母数,小写英文字母数以及非英文字母的三种方法...
- 用vim编辑时怎么复制粘贴外部内容(在ubuntu操作系统中)
- 有序数组二分查找最接近的值
- “记忆力争夺战”走向尾声,“潜意识记忆营销”将成破局利器
热门文章
- python 直接if判断和is not None的区别
- LeetCode简单题之三角形的最大周长
- CodeGen融合核心扩展定制文件
- 2020年Yann Lecun深度学习笔记(上)
- 2021年大数据HBase(十五):HBase的Bulk Load批量加载操作
- Python的输出:Python2.7和Python3.7的区别
- 零起点学算法01——第一个程序Hello World!
- java类安卓app 简介_android.app.Activity 的介绍
- Android TextView textAppearance
- Installation error: INSTALL_FAILED_VERSION_DOWNGRADE