mysql redo log
2022-03-15 本文已影响0人
frankie_cheung
redo log 是什么
redo log 是mysql innodb引擎下的一种物理日志,记录数据页的修改记录。
redo log 的作用主要是
- 崩溃恢复,数据库实例在重启的时候,总会重新加载redo log里面的日志信息(last checkpoint之后的)
- 更加快的commit,数据库写redo log 是追加写,写完就可以commit,后续数据页持久化到ibd文件是后台线程在刷,即刷脏页。
redo log 刷新策略
show engine innodb status
可以看的如下信息
Log sequence number 2830566 日志序列号值
Log flushed up to 2830566 redo 刷新到磁盘的值
Pages flushed up to 2830566 下次做checkpoint 的值
Last checkpoint at 2830557 checkpoint的值,这个值之前的代表已经刷新到ibd文件,不需要检查,这个值之后的才需要进行崩溃恢复
0 pending log flushes, 0 pending chkp writes
97 log i/o's done, 0.00 log i/o's/second
innodb_flush_log_at_trx_commit | 含义 |
---|---|
0 | 从redo log buffer 每秒刷新到磁盘 |
1 | commit后就刷新到磁盘 |
2 | commit后只刷新到文件系统缓冲里 |
redo log 配置
redo log 可以通过innodb_log_files_in_group 来配置为多个
innodb_log_file_size 来表示redo log的大小
例如如下
innodb_log_files_in_group =16
innodb_log_file_size =256M
innodb_log_buffer_size =64M
log block
redo log 在buffer和磁盘都是按照512字节进行存贮的,磁盘扇区也是512字节,所以buffer的 log block 刷新到磁盘是原子的。不需要doublewrite