前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql中的Redo Log解析(一)

Mysql中的Redo Log解析(一)

作者头像
AsiaYe
发布2019-11-06 17:51:31
1.5K0
发布2019-11-06 17:51:31
举报
文章被收录于专栏:DBA随笔DBA随笔
mysql中的redo log解析(一) 01

redo log是个啥?

Innodb是使用16k大小的数据页来管理存储空间的,数据页也是内存和磁盘交互的最小单位。我们知道事务提交后是先将修改过的数据页保存在内存中,然后再刷新到磁盘上进行持久化。我们还知道事务具有持久性的特性,那么问题来了,如果事务提交之后,数据页被保存在内存中,这个时候系统崩溃了,内存中的数据就没有了,所做的修改就无法修复了,那么事务的持久性也就没有了。

redo log就是用来解决这个问题的。当然,有人会说,每次提交事务的之前先将内存中的修改刷新到磁盘上,然后再提交不久能解决这个问题了么?但是这里有两点需要注意:

1、刷新一个16k的数据页太浪费时间了。

2、事务进行多处修改的时候,随机IO刷盘比较慢。

基于上面的问题,redo log诞生了,它主要是将事务对数据页所做的修改记录在日志里面,这样在机器重新恢复的时候能够通过这些日志将数据页恢复出来,从而实现事务的持久性。

redo log有两个特点:

第一,redo 日志占用的空间非常小,它只保存没有刷新到磁盘上的操作内容。

第二,redo 日志是顺序写入磁盘的。

02

redo log种类和写入方法

在Innodb中,按照所做的修改不同,一共有几十种redo log日志,包含创建行记录的redo日志,删除行记录的redo日志等等,而这每一项里面,又包含很多子项,总之,我们需要了解的是,redo log的种类比较多,有几十种,不超过128种。redo log一般保存在日志文件ib_logfile0和ib_logfile1这种文件中,如下:

代码语言:javascript
复制
[root@ innodblog]# ll
total 4156540
-rw-r----- 1 mysql mysql 1073741824 Sep 28 11:34 ib_logfile0
-rw-r----- 1 mysql mysql 1073741824 Sep 18 08:14 ib_logfile1
-rw-r----- 1 mysql mysql 1073742918 Sep 20 01:13 mysqlbin.000129
-rw-r----- 1 mysql mysql 1035045773 Sep 28 11:34 mysqlbin.000130
-rw-r----- 1 mysql mysql         86 Sep 20 01:13 mysqlbin.index

当然,我们可以修改ib_logfile的个数和大小以及存放路径:

可以通过参数innodb_log_files_in_group来改变文件个数,这个参数的默认值是2;

可以通过参数innodb_log_file_size来指定每个redo日志的大小;

可以通过参数innodb_log_group_home_dir指定redo日志所在的目录。

redo log文件组是通过下面这种循环的方式来进行进行文件存储的,当文件组最后一个文件被写满的时候,会从第一个文件开始写,之所以可以这样操作,是因为数据一旦刷盘,那么redo log中的日志就没有使用的意义了,也就可以被覆盖写了。

我们假设现在有一条insert的语句需要执行,在insert的时候,不仅仅会修改若干条记录,还会修改索引和一些记录之间的链表信息,这样,可能修改的就是多个页面了,在这个过程中,如果某个数据页已经满了,再进行insert操作,还有可能发生数据页的分裂。这样,一条语句就会生成多条redo log,在Innodb中,通过一个Mini-Transaction(最小事务)的概念来划分日志组,这个Mini-Transaction(后面简称mtr)表示对底层页面的一次原子访问,也就是要么成功,要么失败。从这个概念中我们可以看到,redo log可能不是一条一条的写入磁盘的,是以组的概念进行写入磁盘的,可能是一条,也可能是一次性多条。

我们知道,一个事务可以包含多个语句,一个语句中可以包含多个mtr,每一个mtr包含多个redo日志,我们表示一下就是这样:

先这么多吧,有空了明儿再更新。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档