文章目录
[隐藏]
什么是InnoDB事务日志
撤消
重做
日志大小
重做日志大小
更改重做日志大小
什么是InnoDB事务日志
你有没有在文本编辑器中使用过撤消或重做的功能,想像一下编辑器在那种场景下的操作?我确信你应该使用过。你相信吗?事务型数据库有同样的功能。可能不完全一样,但原理是相同的。
就像当你编辑文字时始终有能力撤消数步的重要性一样,重做和撤消功能也对事务型数据一样重要。为什么呢?主要有两个原因:
1.回滚事务(那是撤消)
2.在数据库崩溃的情况下回放已提交的事务(那是重做)
撤消
当你使用的是事务存储引擎(假设是InnoDB),你更改一个记录时,更改并没有马上写入数据文件。
首先,它们被写入到一个硬盘上特定的文件叫做事务日志。同时,它们也更改了内存 – InnoDB缓冲池。现在新InnoDB页面包含了已更改的记录叫脏数据。
被复制到硬盘上特别区域的原始未被更改的页面叫做回滚段。
如果有人在提交之前使用ROLLBACK中断了一个事务,撤消操作就发生了 – 你的记录已经被还原到原始状态。
由于更改还没有被写入到数据文件,这个操作相当简单 – InnoDB仅仅需要从回滚段中提取旧页面,从内存中擦除脏页,并在事务日志中标记那个事务已经回滚。
所以你看,数据文件从没有被更改,因为在执行随机写操作以把脏数据刷新到硬盘之前你已经把所有更改取消了。
重做
当你提交事务,然后InnoDB确认你的提交,更改准备写入到实际的数据文件。
现在你认为它们会被