暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
21说过的话就一定要办到 —— redo 日志(下)(02).pdf
541
28页
20次
2022-03-14
免费下载
redo
标签 MySQL 是怎样运⾏的
redo⽂件
redo⽇志刷盘
我们前边说mtr运⾏过程中产⽣的⼀redo⽇志在mtr结束时会被复
制到log buffer,可是这些⽇志总在内存⾥呆着也不是个办法,
在⼀些情况下它们会被刷新到磁盘⾥,⽐如:
log buffer间不⾜时
log buffer⼤⼩是有限的(通过系统变量
innodb_log_buffer_size指定),如果不停的往这个有
⼤⼩log buffer⾥塞⼊⽇志,很快它就会被填满。设计
InnoDB⼤叔认为如果当前写log bufferredo⽇志
已经占满了log buffer总容量的⼤约⼀半左右,就需要把
些⽇志刷新到磁盘上
事务提交时
我们前边说过之所以使⽤redo⽇志主要是因为它占⽤的空间
少,还是顺序写,在事务提交时可以不把修改过的Buffer
Pool⻚⾯刷新到磁盘,但是为了保证持久性,必须要把修改
些⻚⾯对应redo志刷新到磁盘
Force Log at Commit
后台线程不停的刷刷
后台有⼀个线程,⼤约每秒都会刷新⼀log buffer中的
redo⽇志到磁盘。
正常关闭服务器
做所谓的checkpoint(我们现在没介绍过checkpoint
概念,稍后会仔细唠叨,稍安勿躁
其他的⼀些情况...
redo⽇志⽂件
MySQL的数据⽬录(使⽤SHOW VARIABLES LIKE 'datadir'
看)下默认有两个名ib_logfile0ib_logfile1的⽂件,log
buffer的⽇志默认情况下就是刷新到这两个磁盘⽂件中。如果
们对默认的redo⽇志⽂件不满意,可以通过下边⼏个启动参数来
节:
innodb_log_group_home_dir
该参数指定redo志⽂件所在的⽬录,默认值就是当前的
据⽬录。
innodb_log_file_size
该参数指定了每redo志⽂件的⼤⼩,在MySQL 5.7.21
这个版本中的默认值48MB
innodb_log_files_in_group
该参数指定redo⽇志⽂件的个数,默认值为2,最⼤值
100
从上边的描述中可以看到,磁盘上redo志⽂件不只⼀个,⽽
以⼀个⽇志⽂件组的形式出现的。这些⽂件以ib_logfile[数字]
(数字可以012...)的形式进⾏命名。在将redo⽇志写⼊
志⽂件组时,是ib_logfile0始写,如ib_logfile0
了,就接着ib_logfile1写,同理ib_logfile1满了就去
ib_logfile2,依此类推。如果写到最后⼀个⽂件该咋办?那就
新转ib_logfile0继续写,所以整个过程如下图所示:
总共redo志⽂件⼤⼩其实就是innodb_log_file_size ×
innodb_log_files_in_group
⼩贴⼠:如果采⽤循环使⽤的⽅式redo志⽂件组⾥写数据的
话,那岂不是要追尾,也就是后写⼊的redo⽇志覆盖掉前边写的
redo⽇志?当然可能了!所以设计InnoDB⼤叔提出
checkpoint概念,稍后我们重点唠叨
redo⽇志⽂件
我们前边说log buffer质上是⼀⽚连续的内存空间,被划分成
了若⼲个512节⼤⼩的blocklog bufferredo志刷新到
磁盘的本质就是block的镜像写⼊⽇志⽂件所以redo⽇志⽂件
其实也是由若⼲512节⼤⼩的block组成
redo⽇志⽂件组中的每个⽂件⼤⼩都⼀样,格式也⼀样,都是由
部分组成:
of 28
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。