摘要:
事务是数据库的一个很重要的点, 无论如何都绕不开, 尤其是对于TP系统来说没有事务是不可想象的。
本文对innodb的事务的实现进行一些反思
事务的特性:
- A 原子性
- C 一致性
- I 隔离性
- D 持久性
innodb的事务实现
原子性:
- 依赖于undo log
- undo log中不仅仅记录了如果回滚的操作, 还记录了该事务的行的数据
- undo log中的回滚段, 又保持着过去事务的链表, 可以追踪到过去的事务
- purge回收线程对undo log中已经没有被追踪的事务进行回收
- 行数据中有隐藏的列属性, 指向了undo log中的事务的地址
- 可以通过行数据和事务id, 找到特定事务的数据
持久性:
- 依赖于redo log, 事务执行过程中宕机则使用redo log进行事务回放
- 增加了buffer pool做为内存缓存
- 使用了Insert buffer, double write, 预读,自适应hash提升性能
隔离性:
- 隔离性是对于事务来说
- 从数据层面来说, 事务可分为写事务和读事务
- 写写并行使用锁来解决
- 标准行