MYSQL-事务原理
事务原理
redolog-事务持久性
重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。
该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log file) ,前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用,从而保证持久性。
原理:数据以页的单位存于缓冲区中,当业务在进行操作的时候,会先操作缓冲区,增删改查都会通过缓冲区,在缓冲区中变更了的数据跟磁盘中不一致就成为脏页,通过一定的频率来刷新到磁盘中实现持久化操作,但这期间如果系统崩溃,导致没有刷新到磁盘中,就会导致磁盘中数据与缓冲区不一致,而通过将数据页变化存在重做缓冲区中(内存结构中),当事务提交的时候将数据页变化内容刷新到磁盘当中,持久化保存在磁盘中,当缓冲区向磁盘刷新时出错了,可以根据redolog恢复。
为什么不直接把变更的数据页刷新到磁盘中?答:事务中的操作的时候是随机操作数据页的,而追加式存入日志中可以一并刷新到磁盘,性能比较高。
undolog-事务原子性
回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和MVCC(多版本并发控制)。
- undo log和redo log记录物理日志(记录的数据是什么样的)不一样,它是逻辑日志(每一步的操作)。可以认为当delete-条记录时, undo log中会记录一条对 应的insert记录,反之亦然,当update- 条记录时,它记录一条对应相反的update记录。当执行rollback时, 就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。
- Undo log销毁: undo log在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC。
- Undo log存储: undo log采用段的方式进行管理和记录,存放在前面介绍的rollback segment回滚段中,内部包含1024个undo log segment。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY