博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
innodb master线程的工作机制
阅读量:2448 次
发布时间:2019-05-10

本文共 1987 字,大约阅读时间需要 6 分钟。

由几个loop组成:

Loop

Background loop

Flush loop

Suspend loop

 

Loop

分为两大部分:per-secondper-10-second

Per-second

刷新日志缓冲--

合并插入缓冲如果前1秒的IO次数小于5innodb会认为当前IO压力小,就会执行此操作

刷新100个脏页如果当前脏页比例超过innodb_max_dirty_pages_pct,则刷新脏页

如果当前没有active操作,则切换到background loop

 

--相应伪代码

For  ( I = 0; I < 10; i++) {

  Thread_sleep(1);

  Do log flush to disk;

  If ( last_one_second_ios < 5)

      Do merge insert buffer

  If ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct )

     Flush dirty page innodb_io_capacity

 If ( no user actitivity)

     Goto background loop

}

 

注:当系统负载较大时,可能每次循环间隙小于1秒,由InnoDB自动调整

Show engine innodb status相应输出片断

-------------------

BACKGROUND THREAD

-------------------

Srv_master_thread loops: 45 1_second, 45 sleeps, 4 10_second, 6 background, 6 flush  --系统空闲时候

 

Srv_master_thread loops: 2188 1_second, 1537 sleeps, 218 10_second, 2 background, 2 flush  --繁忙,并非每次1_secondsleep 1

 

 

Per-10second

刷新100个脏页如果过去10IO操作小于200次,则刷新脏页

合并至多5个插入缓冲

刷新重做日志缓冲

删除无用的undo执行full purge,判断标志为deleted的行是否可以清除

刷新10010个脏页如果buf_get_modified_ratio_pct > 70% 刷新100个脏页,否则刷新10个脏页

生成checkpoint—将最老的LSN页写入磁盘

 

--相应伪代码

If ( last_10_second_ios < 200 )

   Flush dirty page innodb_io_capacity

Do merge insert buffer

Flush log buffer

Do full purge

 

Background loop

若当前没有用户活动,或关闭数据库时执行,依次执行如下操作:

删除无用的undo

合并20个插入缓冲

如果有active活动,跳回loop;否则刷新100个脏页,如果buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct,则跳转至flush loop

 

Flush loop

每次刷新100个页,直到符合条件为止(buf_get_modified_ratio_pct < innodb_max_dirty_pages_pct)

如果flush loop无事可做,则跳转至suspend_loop

 

Suspend loop

mater thread挂起,等待被触发

 

 

上述每次刷新100个脏页或执行Ninsert buffer全是hard codinginnodb plugin提供了patch,可通过参数控制这一数字

Innodb_io_capacity:一次刷新的脏页数量,默认200;而每次合并插入缓冲的数量=innodb_io_capacity * 5%

Innodb_adaptive_flushing:通过buf_flush_get_desired_flush_rate判断需要刷新脏页的数量,通过判断redo log生成速度决定可刷新脏页的数量,即使比例< innodb_max_dirty_pages_pct,也可能刷新脏页;

 

 

以上信息来源于

MySQL技术内幕 –InnoDB存储引擎》

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-757902/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15480802/viewspace-757902/

你可能感兴趣的文章
改善Google Chrome中的YouTube视频观看
查看>>
配置您的计算机以备份到Windows Home Server
查看>>
解决Windows Home Server Toolkit的连接问题
查看>>
如何在Windows 10中打印照片
查看>>
如何在离开时自动检测巢穴
查看>>
ubuntu显示管理器_如何在Ubuntu的文件管理器中显示导航栏而不显示面包屑
查看>>
关于极客
查看>>
自定义日历_如何在网络上自定义Google日历的通知
查看>>
hue功能_Philips Hue的“新实验室”部分中的最佳实验功能
查看>>
微软office在线文档_如何使用Microsoft Office密码保护文档和PDF
查看>>
如何在SHIELD Android TV上调整过扫描
查看>>
outlook 禁用不安全_如何在Outlook中禁用删除确认对话框
查看>>
找到丢失的磁贴跟踪器后如何获取通知
查看>>
android 更改软键盘_如何在Android上更改Google键盘的主题
查看>>
kodi 缓存文件夹_如何将Kodi图稿与视频存储在同一文件夹中
查看>>
windows隐藏磁盘_如何在Windows的磁盘清理工具中启用隐藏选项
查看>>
如何在Linux或macOS终端中使用Bash历史记录
查看>>
photos设置成中文_如何在OS X的Photos中设置和使用扩展程序
查看>>
大剧院自助签证_如果您的项目是《剧院》,请使用演员
查看>>
windows终端终端_Windows终端介绍
查看>>