码迷,mamicode.com
首页 > 数据库 > 详细

mysql5.6 redo日志与刷脏

时间:2016-08-09 19:01:44      阅读:400      评论:0      收藏:0      [点我收藏+]

标签:

1.redo日志

为了在服务器崩溃时保证数据安全并提升系统性能,innodb存储引擎首先会将提交的事物内容记录到redo日志,而对实际数据文件修改则放在以后,批处理方式刷盘。redo日志像逻辑的存储场所,它循环使用多个文件。(ib_logfile0、ib_logfile1、ib_logfile2)

innodb_log_file_size     #各日志文件大小

innodb_log_files_in_group     #日志文件的个数,innodb最终可用的日志大小为innodb_log_file_size *innodb_log_files_in_group

 innodb_log_group_home_dir    #日志目录

redo日志空间越大,innodb缓冲池中就可以停留更多的“脏页”。这样,innodb缓冲池的脏页就可以更大批量的新式刷新到磁盘。由于mysql5.5redo日志可用空间最大为4GB,所以在拥有大容量缓存的innodb中,工作效率并不高。mysql5.6开始允许用户设置4GB以上redo日志,innodb_log_file_size *innodb_log_files_in_group组合最大可以为512GB.这样,当在拥有大量缓存空间时脏页可以更有效发挥写缓冲作用。

2.刷脏

在innodb中处理用户查询后,其结果在内存空间的缓冲池已经发生变化,但是还未记录到磁盘。这种页面称为脏页,将脏页记录到磁盘的过程称为刷脏。刷脏分两种算法:flush-list(依据时间管理缓冲池中更改页面的列表)LRU-list(用于管理缓冲池中非常用页面的列表)

(1)flush-list根据RDBMSredo日志的工作方式(write Ahead Log),在redo日志与脏页中,redo日志总要首先被完全刷到磁盘时,才能再次使用与该脏页相关的redo日志槽。此时为了在缓冲池中快速查找脏页,会根据脏页的修改时间顺序维护一个链表,该链表称为flush-list。

(2)假如innodb的缓冲池全部由数据页和索引填满,innodb缓冲池没有空闲空间。此情形下,一个新查询到来,这时为了执行该查询,innodb存储引擎必须从缓冲池中删除几个已经加载的页面,innodb不会随意删除,innodb管理着LRU-list链表,需要删除时会从该链表选择。LRU-list维护着最近不常用的页面列表。LRU-list分为两个区域,MRU和LRU。MRU位于LRU-list的5/8之前,其余部分为LRU。也就是5/8之前存储着常用的页面,其余3/8为不常用页面(可以修改innodb_old_blocks_pct系统变量值控制MRU与LRU之间的分割点,默认值为5/8)。删除内容会在最不常用链表的末端删除几个页面。删除之前会进行刷脏。

mysql5.6 redo日志与刷脏

标签:

原文地址:http://www.cnblogs.com/xxmysql/p/5754211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!