第14章 并发控制与恢复
考试范围: 14.1-14.3, 14.8-14.11
考试题型: 事务操作
考试内容:
1、锁/共享锁/排它锁的概念
2、多粒度锁 Multiple Granularity
3、两阶段封锁协议 The Two-Phase Locking Protocol
-
两段锁协议是指同一事务对任何数据进行读写之前必须对该数据加锁,在释放一个封锁之后,该事务不再申请和获得任何其他封锁。
-
Each transaction issue lock and unlock requests in two phases:
- Growing Phase 扩张阶段
- A transaction may obtain locks, but may not release locks
- Shrinking Phase 收缩阶段
- A transaction may release locks, but may not obtain locks
- Growing Phase 扩张阶段
-
例子
-
T1:Slock A…Slock B…Xlock C…Unlock B…Unlock A…Unlock C
T2:Slock A…Unlock A…Slock B…Xlock C…Unlock C…Unlock BT1符合两段锁协议,T2不符合。因为整个加锁阶段不能有解锁,解锁阶段不能有加锁。
-
-
Initially, a transaction is in the growing phase. The transaction acquires locks as needed. Once the transaction releases a lock, it enters the shrinking phase, and it cannot issue lock requests (最初,交易处于增长阶段。事务根据需要获取锁。一旦事务释放锁,它就会进入收缩阶段,并且无法发出锁定请求)
-
两阶段锁定协议的变体
- Strict two-phase locking protocol
- a transaction must hold all its X-locks until it commits/aborts 事务必须保留其所有 X 锁,直到提交/中止
- Can ensure cascadeless and recoverable schedules 可以确保无级联和可恢复调度
- Rigorous two-phase locking
- all locks are held until commit/abort 所有锁都保持,直到提交/中止
- transactions can be serialized in the order in which they commit 事务可以按照其提交的顺序进行串行化
- Strict two-phase locking protocol
4、日志的概念
- 日志是一系列日志记录。记录保留有关数据库上的更新活动的信息 A log is a sequence of log records. The records keep information about update activities on the database
5、Checkpoint概念
- 问题:当日志太大,重做/撤消日志中记录的所有事务可能非常慢
- 处理整个日志非常耗时
- 我们可能会不必要地重做已经将其更新输出到数据库的事务
- 解决方法:通过定期执行检查点来简化恢复过程
- 将当前驻留在主内存中的所有日志记录输出到稳定存储中
- 将所有修改的缓冲区块输出到磁盘
- 将日志记录**<checkpoint** L**>** 写入稳定存储,其中 L 是检查点时所有活动事务的列表
- 执行检查点操作时停止所有更新
- 示例
6、立即的数据库更新
-
立即修改方案允许在事务提交之前对缓冲区或磁盘本身更新未提交的事务,更新的块输出到磁盘可以在事务提交之前或之后的任何时间进行,块的输出顺序可能与写入块的顺序不同
-
示例
7、恢复策略(redo undo哪些事务)
-
并发控制和恢复 Concurrency Control and Recovery
- 未提交事务的更新不应对其他事务可见
- 可以通过获取更新项目的排它锁并保持锁直到事务结束(strict two-phase locking)来确保
-
从故障中恢复
- 示例
- 示例