MySQL事务实现 校招知识点总结

本章内容:

  1. 事务特性
  2. redo log如何实现持久性
  3. undo log如何实现原子性
  4. 锁+MVCC 实现隔离性

事务特性

  • A:Atomic,原子性,即事务中的操作要么全部完成,要么全部失败
  • C:Consistent,一致性,靠其他三大特性支持
  • I:Isolation,隔离性,事务之间不能相互影响
  • D:Durability,持久性,即commit操作完成后,事务对数据库的修改就该有效;
    • 主要是修改操作是先修改内存中的数据拷贝,以后才刷新回磁盘中,所以如果这时服务器宕机,修改就丢失了

redo log如何实现持久性

实现:innodb通过Force Log at Commit机制实现持久性

  • 即提交事务时,必须必须把事务所有修改操作写入redo log文件,之后提交才算完成
  • innodb启动时,会检查是否需要进行恢复操作

性能影响:redo log包括两部分(内存中的重做日志缓冲区、磁盘中的重做日志文件),重做日志缓冲会先写入到文件系统的缓存里的,必须得fsync系统调用才写回文件

补充:innodb允许用户手动设置非持久化来提高性能

  • 修改操作不是每次都直接写入redo log文件中的,会先写入redo log缓冲中,再通过fsync系统调用把缓冲刷入文件中持久化
  • innodb_flush_log_at_tri_commit控制每几次事务刷一次

undo log

作用:回滚(保证原子性)+MVCC

实现:记录事务修改操作,遇到ROLLBACK或异常时,查看日志来进行反操作

分类:

  • insert undo log:插入数据只对本事务可见(RR解决了幻读),提交后即删除
  • update undo log:用于MVCC,放入undo log链表中等待purge线程删除
    • 哪些undo log可删除:不会被活跃事务再访问,比如说如果有两个已提交事务对某数据修改,那先提交的那个undo log就可以删除了

注:回滚是逻辑回滚,物理结构可能变化;undo log操作也会产生redo log,也需要持久化

redo和undo的区别

 redoundo
用处保证持久性回滚、MVCC
存储位置redo log文件undo段(数据结构)
 物理日志(往哪个页写、删)逻辑日志(sql)
  undo log的回滚操作也会写入redo

Innodb 锁实现事务隔离性

数据库实现AID三大特性后,才有可能实现一致性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值