这是我参与[第五届青训营]笔记创作活动的第13天 本文主要想对课堂上学的一些内容进行总结整理。今天学习的是关系型数据的核心技术中的事务引擎及其分析。
一、本堂课重点内容
- 事务引擎
二、详细知识点介绍
事务引擎
Atomicity与Undo Log
mysql中数据状态的回退通过Undo日志实现。Undo日志是一种逻辑日志,记录了数据的增量变化。利用Undo日志进行事务回滚,可以保证事务的原子性。同时实现了多版本并发控制(MVCC),解决读写冲突和一致性读的问题。
IsoIation与锁
事务一致性主要通过锁的机制实现。读数据的时候通过加共享锁,写数据的时候通过加互斥锁,一边读数据一边写数据则要通过MVCC
MVCC:
读写互补阻塞
降低死锁概率
实现一致性读
Undo日志在MVCC中:
数据间通过roll ptr形成链表,读的时候可以先读老版本数据,实现互不影响
Durability与Redo Log
事务结束后对数据的永久的保存可以通过以下方式实现
1.事务提交前页面写盘
但这种情况会出现随机IO,对于HDD这种磁盘随机访问能力会比较差,所以使用事务提交前页面写盘进行数据的永久保存,随机访问的代价会比较大。同时会出现写放大的问题,从最小的管理单元-一个页(16kb),本来只需要写十几个字节,现在可能要写16kb
2.WAL(Write-ahead logging)
redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启Mysql后会根据redo log重做。这样就实现了数据的永久的保存