4.4并发控制 基于锁的协议 基于时间戳的协议 基于验证的协议 多种粒度 多版本方案 死锁处理 插入与删除操作 ORACLE并发控制
4.4 并发控制 • 基于锁的协议 • 基于时间戳的协议 • 基于验证的协议 • 多种粒度 • 多版本方案 • 死锁处理 • 插入与删除操作 • ORACLE并发控制
基于锁的协议 ·锁是用来控制对数据项的并发存取的机制 数据项可有两种锁方式 1.排它(X方式.数据项可被读写X-锁用 lock-X指令请求 2.共享S方式.数据项只能被读S-锁用lock-S指令请求 向并发控制管理器请求锁.仅当锁请求被批准后事务才能 继续
基于锁的协议 • 锁是用来控制对数据项的并发存取的机制 • 数据项可有两种锁方式: 1. 排它(X)方式. 数据项可被读写. X-锁用 lock-X指令请求. 2. 共享(S)方式. 数据项只能被读. S-锁用 lock-S指令请求. • 向并发控制管理器请求锁. 仅当锁请求被批准后事务才能 继续
两阶段锁协议 事务锁管理分数据项的加锁和解锁; 加锁阶段:在对任何数据进行读写之前,事务首 先要获得对该数据的加锁,在此阶段不能释放锁; 解锁阶段:在开始释放锁后,不能再申请加锁 满足两段锁协议的合理调度(遵循给定锁协议的一组 事务的调度)都是冲突可串行的
两阶段锁协议 • 事务锁管理分数据项的加锁和解锁; • 加锁阶段:在对任何数据进行读写之前,事务首 先要获得对该数据的加锁,在此阶段不能释放锁; • 解锁阶段:在开始释放锁后,不能再申请加锁。 • 满足两段锁协议的合理调度(遵循给定锁协议的一组 事务的调度)都是冲突可串行的
两阶段锁不能避免死锁 ·两阶段锁不能避免级联回滚.用称为严格( strict两阶段 锁的改进协议可避免:事务必须保持它的所有排他锁直 至提交/失败. ·严密( rigorous)两阶段锁更加严格:所有锁都必须保持 到事务提交/失败.在这种协议中事务可按它们提交的 次序串行化
• 两阶段锁不能避免死锁 • 两阶段锁不能避免级联回滚. 用称为严格(strict)两阶段 锁的改进协议可避免: 事务必须保持它的所有排他锁直 至提交/失败. • 严密(rigorous)两阶段锁更加严格: 所有锁都必须保持 到事务提交/失败. 在这种协议中事务可按它们提交的 次序串行化
锁转换 带有锁转换的两阶段锁 第一阶段 可获得lock-S 可获得 lock-X 可转换lock-S到lock-X(升级) 第二阶段 可释放 lock-s 可释放 lock-x 可转换lock-X到lock(降级) ·本协议确保可串行化.但仍依靠程序员插入各种封锁 指令
锁转换 • 带有锁转换的两阶段锁: – 第一阶段: – 可获得 lock-S – 可获得 lock-X – 可转换 lock-S 到 lock-X (升级) – 第二阶段: – 可释放 lock-S – 可释放 lock-X – 可转换 lock-X 到 lock-S (降级) • 本协议确保可串行化. 但仍依靠程序员插入各种封锁 指令
多种并发控制粒度 允许数据项具有不同大小,从而定义一个数据粒度层次, 小粒度嵌入在大粒度中 可图示为一棵树C 当一事务对树中节点显式加锁,它也对该节点的所有后 裔隐含地加了同样的锁 锁粒度(封锁发生的树层次): 系粒度(树中较低层):高并发度,高锁开销 祖粒度(树中较高层)低锁开销,低并发度
多种并发控制粒度 • 允许数据项具有不同大小, 从而定义一个数据粒度层次, 小粒度嵌入在大粒度中 • 可图示为一棵树C • 当一事务对树中节点显式加锁, 它也对该节点的所有后 裔隐含地加了同样的锁. • 锁粒度 (封锁发生的树层次): – 系粒度 (树中较低层): 高并发度, 高锁开销 – 粗粒度 (树中较高层): 低锁开销, 低并发度
DB A 例中最高层是整个数据库 低层依次是aea,fle和 record
粒度层次例 例中最高层是整个数据库. 低层依次是area, file 和record
意向锁 除了S和X锁方式,还有另外三种多粒度的锁方式 意向共享(S)表示在树的低层有显式加共享锁 意向排他(X)表示在树的低层有显式加排他或共享 锁 共享及意向排他(SIX):以该节点为根的子树被显式 加共享锁,并且在子树的低层显式加排他锁 意向锁允许高层节点按S或X方式加锁而不需检查所有 后裔节点
意向锁 • 除了S 和X 锁方式, 还有另外三种多粒度的锁方式: – 意向共享 (IS): 表示在树的低层有显式加共享锁. – 意向排他 (IX):表示在树的低层有显式加排他或共享 锁 – 共享及意向排他(SIX): 以该节点为根的子树被显式 加共享锁, 并且在子树的低层显式加排他锁. • 意向锁允许高层节点按S或X方式加锁而不需检查所有 后裔节点
意向锁方式的兼容性矩阵 对所有锁方式的兼容性矩阵如下: SⅨX X sⅨ√
意向锁方式的兼容性矩阵 • 对所有锁方式的兼容性矩阵如下: IS IX S S IX X IS IX S S IX X ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
事务T可以根据下列规则来锁一个节点Q 1.必须遵守锁兼容性矩阵 2.树的根必须首先加锁,并且可以任何方式加锁 3仅当节点Q的父节点当前被T以IX或IS方式加锁时,Q才可 被T以S或IS方式加锁 4.仅当节点Q的父节点当前被以I或SX方式加锁时,Q才可 以被T以X,SIX,或I方式加锁 5仅当7先前没有对任何节点开锁时才可以对一个节点加锁 (即,G是两阶段的) 6.仅当Q的子女没有正被T加锁时,T才可以对节点Q开锁 注意锁是按从根到叶次序获得的,但是按从叶到根次序释放 的
• 事务Ti 可以根据下列规则来锁一个节点Q: 1. 必须遵守锁兼容性矩阵. 2. 树的根必须首先加锁, 并且可以任何方式加锁. 3. 仅当节点Q 的父节点当前被Ti 以IX或IS方式加锁时, Q 才可 被Ti 以S或IS方式加锁. 4. 仅当节点Q 的父节点当前被Ti 以IX或SIX方式加锁时, Q 才可 以被Ti 以X, SIX, 或IX方式加锁. 5. 仅当Ti 先前没有对任何节点开锁时才可以对一个节点加锁 (即, Ti 是两阶段的). 6. 仅当Q 的子女没有正被Ti 加锁时, Ti 才可以对节点Q 开锁. • 注意锁是按从根到叶次序获得的, 但是按从叶到根次序释放 的