有关本篇内容的目录大纲展示如下:
| 章节 | 小节 | 备注 |
|---|---|---|
| 1 事务基本概念 | 1.1 原子性 Atomicity | 事务原子性的概念;innodb 如何保证原子性 |
| 1.2 一致性 Consistency | 事务一致性的概念;innodb 如何保证一致性 | |
| 1.3 隔离性 Isolation | 事务隔离性的概念;innodb 如何保证隔离性 | |
| 1.4 持久性 Durability | 事务持久性的概念:innodb 如何保证持久性 | |
| 2 持久性保证 | 2.1 redo log概念 | redo log设计实现思路;如何保证持久性与高性能 |
| 2.2 redo log产生机制 | redolog何时产生以及如何落盘 | |
| 2.3 redo log对比binlog | 分应用范围、存储内容、产生时机进行对比 | |
| 2.4 redo log存储格式 | log block 格式及重做日志格式介绍 | |
| 2.5 redo log使用机制 | LSN的概念;数据恢复流程设计 | |
| 3 原子性保证 | 3.1 undo log概念 | undo log设计实现思路;如何保证事务原子性 |
| 3.2 undo log对比redo log | 分使用目的、内容粒度、存储位置进行对比 | |
| 3.3 undo log存储格式 | 不同操作类型下的undo log格式展示 | |
| 3.4 undo log 产生机制 | 行记录的写流程设计 | |
| 3.5 undo log 使用机制 | 如何在事务回滚、MVCC、数据恢复流程中应用 | |
| 3.6 undo log 回收机制 | 回收执行时机及前置校验条件 | |
| 4 隔离性保证 | 4.1 事务隔离级别 | 四种隔离级别的含义及对应存在的问题 |
| 4.2 innodb 实现 | innodb针对可重复读隔离级别的优化实现 | |
| 5 分布式事务 | 5.1 外部XA事务 | 应用场景;两阶段提交流程设计 |
| 5.2 内部XA事务 | 应用场景;以redo log、binlog 一致性案例加以说明 |
有关本篇涉及到的技术细节,很大程度上参考了 《mysql技术内幕(第2版) 》的内容,在此致敬。
事务是数据库通常都需要具备的一项核心能力,也是其区别于一般文件系统的本质区别之一.
我试着用个人理解对事务的概念进行诠释——所谓事务,指的是一段动态执行过程,它能够将数据库中的数据从一种正确状态转移到另一种满足约束条件的正确状态, 并且这个执行过程中需要满足如下所述的四项性质,也就是经典的事务ACID性质:
原子性 Atomicity,指的是一个事务中的所有操作要能够被组装成一个不可分割的整体,看起来就像在一气呵成地执行一个动作一样,其执行结果要么全部成功,要么全部失败,不会出现割裂的中间状态.
在 innodb 中,针对事务原子性的支持是通过 undo log 机制加以实现的,这部分内容我们放在本文第 3 章详细展开探讨.
一致性 Consistency,指的是在事务执行前后,数据库中的数据状态都处于满足业务预期的、正确一致的状态之下.
一致性可以理解为是数据库追求的最终目标,借由原子性 A、隔离性 I、持久性 D 的加持,共同推进该目标的达成.
隔离性 Isolation,指的是在多个事务并行的场景下,各事务彼此间不会产生互相干扰,不会因为对方的执行而发生数据视角混乱或者执行逻辑出错.
具体而言,事务隔离性不能一概而论,其依附于不同事务隔离级别的语义,有着各自不同的标准及实现.
在 innodb 中,事务隔离性是通过MVCC机制结合锁机制加以保证的,这部分内容将在本文第 4 章内容中展开介绍.
持久性 Durability 的概念很好理解,指的是因事务提交引起的变更能够永久稳定生效,不会处于易失性的状态.