Mysql的事务原理
一、持久性
依靠的是redo log,重做日志,记录的是事务提交时数据也的物理修改,是用来实现事务的持久性。
该日志文件由两部分组成,重做日志缓冲,(redo log buffer) 和重做日志文件(redo log file),前者是在内存中,后者是在磁盘中,当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘发生错误时,进行数据恢复使用。
*脏页:用户在执行增删改时,操作的是内存结构中的Buffer pool中的页, MYSQL会在一定时间内将内存中的页刷新到磁盘来实现持久性,已经被修改但是还没刷新到磁盘中的页叫脏页。
*WAL:这种处理用到了WAL机制,先写日志,过一段时间再将内存缓冲区刷新到磁盘中
二、原子性
依靠的是undo log,回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和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 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律