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 (降级) • 本协议确保可串行化. 但仍依靠程序员插入各种封锁 指令