自学内容网 自学内容网

MySQL InnoDB事务总结版

面试版先总结,后续填充细节

老生常谈的事务的四大特性ACID
  • 原子性(Atomicity)
    • 事务被视为一个不可分割的最小单位,它要么完全执行,要么完全不执行。
  • 一致性(Consistency)
    • 一致性保证了事务的执行将数据库从一个一致的状态转变到另一个一致的状态。
  • 隔离性(Isolation)
    • 隔离性是指当多个事务同时对数据库进行操作时,每个事务都是独立的,一个事务的操作不会影响到其他事务。
  • 持久性(Durability)
    • 持久性意味着一旦事务被提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。
你知道它们的实现原理嘛?
原子性是如何保证的?

原子性是基于undo日志,undo日志会记录修改语句的原始信息,会生成DB_TRX_ID,DB_ROLL_PTR (事务ID和回滚指针),如果发生异常为了保证事务的原子性会回滚数据。

一致性和持久性如何保证?

基于redolog,dwb机制,binlog来保证。

  • redo

redolog 和 binlog 二阶段提交,宕机日志重做,前滚回滚。

redo流程
1.加载磁盘数据页到bufferpool,准备修改数据

2.先记录undo日志

3.记录undo的redo日志生成DB_TRX_ID,DB_ROLL_PTR

4.回写到脏页

5.记录数据修改的redo日志

6.宕机检查redo日志的LSN号和pageNO号,加载磁盘的数据页数据进行回滚,如果二阶段提交处于prepare状态,判断binlog是否commit,否:则前滚在回滚 是:前滚后提交

  • DWB机制

dwb机制:默认2个区,128个数据页循环使用,每页数据16kb,磁盘可能4kb或8kb一个块,写到一半宕机了,数据页损坏,redo必须基于完整的数据页才能重做日志,此时用到了之前缓存的数据页来做数据恢复。

隔离性的实现

隔离级别: RU 读未提交 ,RC 读已提交 ,RR 可重复读,Serializable ‌串行化

问题读:脏读,不可重复读,幻读

如何保证的?

通过mvcc机制和锁来保证不同的隔离级别,解决各种问题读

如何避免的幻读?

锁 RC 行锁 ,不能避免

锁 RR NKL锁,下一键锁 左开右闭,避免了幻读

MVCC解决了什么问题?

不可重复读

undo日志,隐藏列,

RC :每次查询生成ReadView

RR:开启事务生成一个致性快照读


原文地址:https://blog.csdn.net/weixin_45549711/article/details/145190112

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!