存储位置:ib_logfile0、ib_logfile1(多文件)
Lsn:日志位置信息,8字节(提交一个事务+1)(5.6.3以上最大可设置512G)
日志页面:大小512字节,与机械硬盘块大小对齐
设置:redo_log_size
设置非常大,奔溃恢复时间较长(后续可能会有多线程恢复)
与buffer大小匹配 buffer_pool大小与日志容量大小设置为10~5:1
日志缓冲区
日志写入也是io操作,如何保证日志写入速度?答案是日志缓冲区
配置:innodb_log_buffer_size
配置:innodb_flush_log_at_commit (日志刷盘策略)建议设置为2
0:只写入日志缓存,(不能保证安全性),会丢失1秒数据(master每秒刷盘)
1:立马刷盘(性能下降)
2:写入操作系统,不写入磁盘,等待操作系统自动刷盘
日志刷盘时机
1.log buffer用完
2.master线程每秒执行一次
3.每次mdl时,如果日质超过预设,将主动日志刷盘,避免执行过程中被动等待刷盘
4.检查点时,保证lsn最小(最旧)的日志刷盘了
5.提交逻辑事务时innodb_flush_log_at_commit日志刷盘策略行文,同上。
redo log的意义
日志是数据库系统存在的意义,没有日志数据库就会退化为文件系统
减少数据page的刷盘数量
将数据的随机写变为日志顺序写,以提高数据库性能
保证buffer poll内存读写安全
网友评论