绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Redo日志--mysql详解(九)
2023-02-08 10:05:15

上篇文章说了,刷新数据是通过页为单位,不可能每次查询都从磁盘查询,于是有了buffer pool,通过free,flush来刷新到磁盘,系统正常关闭,系统空闲,内存不足时候刷新。lru链表为了提高缓存命中率来刷新页到磁盘。后面介绍了acid,原子性代表在一个事务里要么全部成功要么全部失败,一致性官方文档解释是除了数据库的主键建等约束外,还有业务的约束保证一直性,新增和扣减必须一致。

Redo日志

我们为了保证持久化,每次都需要把数据刷新到磁盘上,但我们是根据页来刷新的,并且修改一条sql语句可能包含很多页,但每个页值修改一个字节,很少的数据,这时候总不能直接持久化,但如果系统宕机了,数据没有持久化就会丢失,于是,redo日志就出现了(重做日志)。

Redo日志有两个特点,占用非常小,并且顺序写入磁盘(页的存放是随机I/O)。

所以redo日志大致就是type,space id表空间id,page numer页号,data 日志具体内容。

前面说过当表没有主键或者建,这时候会给一个隐藏的row_id,有个max_row_id是一个全局变量,每次插入会自增1。

我们在执行一条修改语句会修改很多数据,比如索引的几棵b+树,树上的内节点和叶子节点等,也可能创建新页面。

Redo日志有日志缓冲区,类似于buffer pool,会申请redo log buffer连续内存,默认16mb。

这个缓冲区是干嘛的呢,前面我们说了真实刷新数据是在buffer pool里面,但是在存储之前会记录数据到redo log日志上,redo log有点就是占用小,并且顺序I/O,变相来说,redo log实现了从随机I/O变成了顺序I/O,当然buffer pool本身是刷数据还是随机I/O。

Log sequence number:系统运行会不断修改页面生成redo日志,当前默认值是8704,随着redo日志越来越多而升高。Redo日志每条数据都有lsn值,lsn值越小,则代表越早生成。

如何查看系统中的各种lsn值呢,通过show engine innodb。


分享好友

分享这个小栈给你的朋友们,一起进步吧。

MySQL干货资料
创建时间:2020-05-06 14:18:32
每天都有干货输出哦
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~