mysql master thread_mysql innodb master_thread伪代码整理
void master_thread()
{
int innodb_io_capacity = 200 ;//表示磁盘IO吞吐量
int innodb_max_dirty_pages_pct = 75 ;//最大脏页百分比
goto loop;
loop:
//1秒循环
for(int i = o; i<10; i++)
{
thread_sleep(1);//innodb 优化,压力大时不总是等待1秒
//日志缓冲刷新到磁盘
do log buffer flush to disk;
//如果磁盘压力小,合并插入缓冲
if ( last_one_second_ios < innodb_io_capacity*5% )
{
do merge at most innodb_io_capacity*5% insert buffer;
}
//判断脏页比例
if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct )
{
do buffer pool flush innodb_io_capacity*100% dirty page;
}
//如果开启自适应刷新,通过判断产生重做日志的速度来判断合适的刷新脏页数量
else if enable adaptive flush
{
do buffer pool flush desired amount dirty page;
}
//如果无用户活动,切换到 backgroud loop
if ( no user activity )
{
goto backgroud loop;
}
}
//10秒循环
//如果磁盘压力小,刷新innodb_io_capacity*100%的脏页到磁盘
if ( last_ten_second_ios < innodb_io_capacity )
{
do buffer pool flush innodb_io_capacity*100% dirty page;
}
//合并插入缓冲
do merge at most innodb_io_capacity*5% insert buffer;
//日志缓冲刷新到磁盘
do log buffer flush to disk;
//删除无用undo页,每次最多删除20个undo页
do full purge;
//判断脏页比例
if ( buf_get_modified_ratio_pct >70% )//---------
{
do buffer pool flush innodb_io_capacity*100% dirty page;
}
else
{
do buffer pool flush innodb_io_capacity*10% dirty page;
}
//产生一个模糊检查点,只是将最老日志序列号的页写入磁盘
do fuzzy checkpoint;
goto loop;
//backgroud
backgroud loop:
//删除无用undo页
do full purge;
//合并插入缓冲
do merge innodb_io_capacity*100% insert buffer;
//不空闲跳回主循环,空闲则进入flush loop
if not idle
{
goto loop;
}
else
{
goto flush loop;
}
//flush loop
flush loop:
//不断刷新脏页到磁盘,直到脏页比例小于innodb_max_dirty_pages_pct,则进入suspend loop
do buffer pool flush innodb_io_capacity*100% dirty page;
while ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct );
goto suspend loop;
//suspend loop
suspend loop:
suspend_thread();
waiting event;
goto loop;
}
mysql master thread_mysql innodb master_thread伪代码整理相关推荐
- mysql master thread_Mysql的InnoDB引擎-3.CheckPoint手艺、Master Thread
CheckPoint手艺 数据库每次更新数据的时刻都要将脏页刷新会磁盘,同时在事务提交中要先写重做日志,再修改页:在以上过程中发生宕机的,数据若何恢复,脏页刷新到哪里,为了解决这些问题,提出了chec ...
- MySQL技术内幕 InnoDB存储引擎——第2章 InnoDB存储引擎(未完待续)
第2章 InnoDB存储引擎 2.1 InnoDB存储引擎概述 InnoDB存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发). ...
- MySQL内核:InnoDB存储引擎 卷1
MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...
- Mysql运维常用命令回顾整理
一.前景 Mysql作为开源数据库的中坚力量之一,虽然目前已被甲骨文收购,面临闭源风险,但是mysql扔是我们运维工作中最常面对的工作,那如何做好mysql运维工作,甚至做好mysql的基础运维,都是 ...
- Mysql技术内幕InnoDB存储引擎——InnoDB存储引擎
特此申明: 前段时间找工作所以看了<Mysql技术内幕InnoDB存储引擎>,整理的时候除了参考网上已有的笔记贴,加上自己整合的,可能和别人有雷同之处.不过无所谓啦,写出来自己看看,需要的 ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...
- 回收mysql表碎片_MySQL表碎片整理
MySQL表碎片整理 1. 计算碎片大小 要整理碎片,首先要了解碎片的计算方法. 可以通过show table [from|in db_name] status like '%table_name%' ...
- MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
MySQL · 性能优化· InnoDB buffer pool flush策略漫谈 背景 我们知道InnoDB使用buffer pool来缓存从磁盘读取到内存的数据页.buffer pool通常由数 ...
- mysql dba系统学习(21)mysql存储引擎InnoDB
mysql存储引擎InnoDB 1,主体系结构: 默认7个后台线程,4个io thread(insert buffer.log.read.write),1个master thread(优先级最高),1 ...
最新文章
- python教学网站-python学习网站整理
- linux下常用软件下载
- java ssl证书生成_java – 使用jdk中提供的keytool生成SSL证书
- _ASSERTE(_CrtIsValidHeapPointer(pUserData))错误详解
- load out mysql,快速的mysql导入导出数据(load data和outfile)
- java 程序更新_如何关闭JAVA更新程序
- C++中使用set和unordered_set的find方法时遇到的小坑
- 说说代码质量、代码安全和软件测试那些事
- 配置Nginx不同域名访问不同项目
- 1.数据结构 --- 绪论
- matlab 角度转四元数_学习笔记—四元数与欧拉角之间的转换
- SD卡与TF卡基础知识
- 电脑时间校准方法,怎么校准电脑时间
- SQL Sever创库
- 瑞芬科技的电子罗盘,stm32程序
- 柠檬班性能测试day3_性能测试基础知识(0521)
- win10 下 pdfium编译 VS2017
- 把一个字符串中的大写字母和小写字母分别存储到一个新的字符串中
- Android 修改昵称
- 主线程中同步的 XMLHttpRequest 已不推荐使用,因其对终端用户的用户体验存在负面影响。