mysql 原理 ~ redo
Posted danhuangpai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 原理 ~ redo相关的知识,希望对你有一定的参考价值。
一 简介:redo log
二 文件
ib_logfile0 ib_logfile1 两个redo log 默认为一组 循环覆盖写入
三 相关参数
innodb_log_file_size=256M 不能太大也不能太小,推荐256M
innodb_log_file_in_group=16M redo log buffer的大小,不宜太大
innodb_log_buffer_size=2 日志文件数量默认为2,可根据情况适当调节
四 redo log 与binlog的不同
1 产生的机制不同
redo log在innodb引擎层产生
binlog 在mysql server上层生成
2 记录的内容类型不一样
redo log是物理格式日志,记录着每个页的修改的逻辑操作,所以具体来说 redo log记录的是逻辑物理操作
binlog 是逻辑格式日志,仅仅记录着执行的sql语句,属于逻辑操作
3 mysql redo+binlog共同构成了一个完整事务的提交,俗称二阶段提交,通过共有的xid方式确定事务的完整性
六 redo log的特点
1 redo追加是顺序写入
2 redo_log_buffer->redo_log_file 事务生成redo log到文件的方式
3 并发事务
1 并发的事务共享redo_log_buffer,它们的Redo Log按语句的执行顺序,依次交替的记录在一起,
eg:记录1: <trx1, insert …>
记录2: <trx2, update …>
记录3: <trx1, delete …>
记录4: <trx3, update …>
2 并发的事务通过加锁的方式保证事务的顺序写入,直到8.0才实现无锁化的顺序写入
3. 因为C的原因,当一个事务将Redo Log写入磁盘时,也会将其他未提交的事务的日志写入磁盘。
4. Redo Log上只进行顺序追加的操作,当一个事务需要回滚时,它的Redo Log记录也不会从Redo Log中删除掉。
七 redo log buffer刷新机制
1 事务提交时候(commit=1)
2 当log buffer中有一半的内存空间已经被使用
3 当无法进行覆盖log文件时,触发check point机制
八 LSN号
1 具体说明
Log sequence number log_buffer_lsn 缓存记录
Log flushed up to log_file_lsn 文件记录
Last checkpoint at log_file_start_lsn 文件开头记录
2 LSN号和位置
mtr_commit执行时会给每个log record生成一个lsn,此lsn确定了其在log file中的位置,会在指定位置进行加锁,直到此事务进行写入
3 LSN与故障恢复
1 LSN类型为文件开头记录的确定位置,之后会根据page lsn号与redo中的lsn号进行对比,决定重做还是回滚
以上是关于mysql 原理 ~ redo的主要内容,如果未能解决你的问题,请参考以下文章