Chapter 5
Transaction Processing and Recovery
本书是以自底向上的方式来介绍数据库系统概念的:我们首先学习了跟存储相关的数据结构信息,直到现在,我们已经准备好开始学习数据库系统中更高层次的负责缓冲管理、锁管理跟恢复相关的组件。了解这些组件是我们理解数据库事务的先决条件。
transaction 事务是数据库系统中一个不可分割的逻辑工作单元,他允许我们将多个操作表现为一个独立的步骤。在事务中可以执行数据记录的读取及写入操作。一个数据库的事务需要保证 atomicity 原子性、consistency 一致性、isolation 隔离性及 durability 持久性。这几个属性通常被称为 ACID。
-
Atomicity
事务的步骤是不可分割的,这意味着事务中的所有操作要么就全部执行成功,要么就一个都不能执行。换句话说,事务不会被部分的执行。每个事务可以被 commit 提交 (使所有事务中产生的,因为写操作而产生的变更可见) 或 abort 终止*(回滚事务中所有尚未可见的所有副作用)*。提交是一个最终操作,在中断之后,事务可以被重试。
-
Consistency
一致性是特定于应用的保证;一个事务应该只会将数据库从一个有效的状态转移到另一个有效的状态,维持好所有数据库的不变性 (比如约束性、完整性等)。一致性是定义最不明确的属性,可能是因为他是唯一由用户而不是有数据库系统控制的属性。
-
Isolation
多个并行执行的事务应该是互不影响的,就如同只有一个事务在执行一般。隔离性定义了对数据库状态的变更 when 合时是可见的,以及哪些变更对于其他并行中的事务是可见的。出于性能考虑,大部分的数据库都使用了弱于隔离性定义的 isolation level 隔离级别。根据并发控制的方法跟方式不同,事务中所作的变更对于其他并发执行的事务来说可能是可见也可能是不可见的。
-
Durability
当一个事务被提交后,他对数据库状态所作的所有变更需要被持久化到磁盘中,并不受类似断电、系统失效跟崩溃等故障的影响。
在数据库系统中实现事务不只需要使用存储殷勤来组织跟持久化数据到磁盘,还需要一些其他的组件协同工作。对于节点本地的事务来说,需要 trasaction manager 事务管理器来协调、调度来跟踪事务及其各个步骤。
Lock manager 锁管理器保护各种资源防止在并行访问的情况下破坏数据的完整性。当请求一个锁时没锁管理器检查是否已经有其他的事务已共享或互斥的方式持有了该锁,并在不违反当前访问级别规则的前提下授予该锁的访问权限。因为排他锁在同一时刻最多只能够给一个事务持有,如果这时有事务请求该锁,则他必须等到当前事务释放该锁、或者终止并在稍后重试。在锁被释放或是事务终止后,锁管理器会马上通知其他在等待该锁的事务,让他们能够尝试获取锁好继续执行。
Page cache 页缓存作为持久化存储 (磁盘) 跟其他存储引擎之间的代理,他会将未被同步到持久化存储的页的变化暂存起来。所有数据库状态的变化都会首先被应用到页缓存中。
Log manager 日志管理器保存了所有已经应用到页缓存但还未被同步到持久化存储的操作历史 (以日志条目的形式),保证他们不会因为因为崩溃而丢失。话句话说,日志会在在启动时用来重新执行操作及重新构建缓存状态。日志的条目同时还可以用来支持事务终止时的回滚操作。
分布式的事务需要额外的协调者跟远程执行器,我们会在 Chapter 13 在讨论分布式事务的协议。