redo log日志
redo log
redo log日志也叫重做日志,记录某个数据页修改操作,如:对表空间xx中的数据页xx中的偏移量xxx的地方更新了数据xxx。当系统宕机后用来恢复至最后一次事务提交的时候。
redo log的结构
当我们修改数据页的几个字节的值,redo log就划分了不同的类型,MLOG_1BYTE类型的日志指修改了1个字节的值,MLOG_2BYTE就是修改了2个字节的值,MLOG_4BYTE是修改了4个字节的值,MLOG_8BYTE是修改了8个字节的值,如果修改了大量值,用MLOG_WRITE_STRING表示。
redo log的大致结构如:
日志类型(MLOG_1BYTE),表空间ID,数据页号,数据页中的偏移量,修改了几个字节,具体修改的数据
redo log block
每次我们redo log写入时,是存放在redo log block中的,一个redo log block是512字节,它分为三部分:块头,块体,块尾。
12字节header块头分为四部分:
1:4个字节的block no,块编号。
2:2个字节的data length,写入多少的字节数据。
3:2个字节的first record group。每个事物有多个redo log,为一组,第一个日志分组偏移量。
4:4个字节的checkpoint on。
当我们512个字节的redo log block满时,把它写入磁盘redolog文件中去。执行增删改操作后,先进入redo log block这个结构里,然后再进入磁盘文件。
redo log buffer
redo log到底是如何通过内存缓冲之后,再进入磁盘文件里去的,这就涉及到了一个新的组件,redo log buffer,他就是MySQL专门设计了用来缓冲redo log写入的。
redo log buffer其实就是在MySQL启动的时候就会跟操作系统申请一块连续内存空间,类似于buffer pool,buffer pool是申请之后划分了N多个空的缓存页和一些链表结构,便于从磁盘上的数据页加载到内存中,而redo logbuffer也是类似的,申请出来一批连续的内存,这块内存中划分出来多个redo log block。
通过设置mysql的innodb_log_buffer_size可以指定这个redo log buffer的大小, 默认的值就是16MB。
redo log buffer日志什么时候写入磁盘?
1.当redo log buffer的内容使用了一半时,也就是redo log日志占据了8mb时,就会刷入磁盘。
2.当事务提交时,redo log所在的redo log block都刷入磁盘。
3.后台线程定时刷新,每隔1秒就会把redo log buufer 里的redo log block刷到磁盘文件中。
4.Mysql关闭时,redo log block会刷入磁盘。
redo log日志可能会发生的问题:MySQL不停的产生redo log写入日志文件,那么就用一个日志文件写入全部的redo log?
默认的情况下,redo log都会写入一个目录的文件中,这个目录可以通过show variables like 'datadir’进行查看,可以通过innodb_log_group_home_dir参数来设置这个目录,然后redo log日志文件是有多个的,写满了就会写下一个redo log日志文件,通过innodb_log_file_size可以指定每隔redo log文件的大小,默认是48MB,通过innodb_log_files_in_group可以指定日志文件的数量,默认2个。所以默认的情况下,写满第一个redo log文件,写第二个,第二个写满了,覆盖第一个日志文件中原来的redo log,所以默认情况下,mysql保留了最近96MB的redo log,但是够存储上百万条redo log日志了,参数也可以做调整,具体得看实际的业务需求和数据量。
————————————————
redo log日志相关推荐
- oracle的redolog停止,Oracle Redo Log日志故障处理一则
Oracle Redo Log日志故障处理一则 某日oracle服务器异常重启,当重启oracle数据时,发现redo log文件被损坏, 且这个日志文件是current状态的,导致数据库无法打开; ...
- oracle recover redo,oracle redo log日志(当前或非当前日志)损坏之后的db恢复
出错情况: sql> alter database open; alter database open * 第 1 行出现错误: ora-01113: 文件 1 需要介质恢复 ora-01110 ...
- oracle日志重建,在线重建redo log日志组
-------8月在gx行做的,按照行内标准,实现了将原50M每组共5个redolog日志组重建成100M每组共10组. 1 查看目前的redolog日志组,得知在用的为group4 SQL> ...
- mysql dba系统学习(10)innodb引擎的redo log日志的原理
在InnoDB中,bufferpool里面的dirtypage一方面可以加快数据处理速度,同时也会造成数据的不一致(RAMvsDISK).本文介绍了dirtypage是如何产生,以及InnoDB如何利 ...
- mysql dba系统学习(10)innodb引擎的redo log日志的原理 mysql dba系统学习(11)管理innodb引擎的redo log日志的一个问题
在InnoDB中,bufferpool里面的dirtypage一方面可以加快数据处理速度,同时也会造成数据的不一致(RAMvsDISK).本文介绍了dirtypage是如何产生,以及InnoDB如何利 ...
- oracle 删除补全日志组_【REDO】删除REDO LOG重做日志组后需要手工删除对应的日志文件(转)...
为保证重新创建的日志组成员可以成功创建,我们在删除日志组后需要手工删除对应的日志文件. 1.查看数据库当前REDO LOG日志相关信息 1)查看日志组信息 sys@ora10g> select ...
- 【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)
MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...
- MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
日志的重要性 日志绝对是数据库的核心. 持久化的日志记录了各种重要的信息. 数据的恢复需要依赖日志. 慢查询sql语句需要用到慢查询日志.以及错误日志中保存着mysqld数据库服务端在启动过程中 ...
- mysql 日志重做,mysql 物理日志之redo log(重做日志)原理和介绍
重做日志用来实现事务的持久性,即事务ACID中的D. InnoDB是事务的存储引擎,其通过 Force Log at Commit机制实现事务的持久性,即当事务提交(COMMIT)时,必须先将该事务的 ...
最新文章
- 用Leangoo看板工具做办公室采购流程管理
- 手把手构建LSTM的向前传播(Building a LSTM step by step)
- Workshop | 超高效的设计方法你GET了吗?Design Sprint设计冲刺工作坊
- 红旗Linux可以兼容,红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广...
- 2. PHP赋值运算符
- 《机器学习基石》---感知机算法
- CI项目设计Redis队列
- JAVA 创建学生类
- 3_python基础—运算符 2
- python双_集成python双版本详解
- 利用new Object创建对象
- bzoj 2733: [HNOI2012]永无乡(线段树启发式合并)
- 关于类微博的timeline的设计思考
- 判断可逆素数的c语言程序,C语言可逆素数教程
- 远程桌面工具TeamViewer模块之顶部菜单
- sql-in查询-元素超过1000条解决方案
- 下载Youtube-8m视频,ubuntu安装测试使用
- 透明OLED显示器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- PS调色技巧及HSB调色原理
- go用smpt包发送邮件, 被抄送收不到邮件bug