并发控制
事务一个一个串行执行,每个时刻只有一个事务,允许事务并发执行
并发操作破坏了事务的隔离性。导致:丢失修改,不可重复读,读脏数据
并发控制机制就是要用正确的方式调度并发操作,使一个用户的执行不受其他事务影响
数据库的应用优势可以允许不一致性
并发控制技术:封锁,时间戳,乐观控制法,多版本并发控制
11.2 封锁
封锁类型:排他锁(x),共享锁(s)
- 排他锁:写锁,事务对数据对象A加上X锁,其他事务就不能读取修改对象A
- 共享锁,读锁,其他事务可以读,其他事务不能加X,只能读
11.3封锁协议
规则:何时申请X锁,S锁,持锁事件,释放,封锁协议
封锁协议为三级
1.一级锁协议:事务T在修改数据R之前必须加X锁,直到事务结束后释放,结束包含,commmit,rollback.仅仅读数据不修改不对其加锁,不能保证可重复读和读脏数据
2. 二级协议:事务T在读取数据R必须对其加S锁,读完后释放,不保证可重复读
3. 三级协议:事务T在读取数据R必须对其加S锁,事务结束释放
11.4 活锁和死锁
11.4.1活锁
多个锁时,导致一个锁始终等待,避免活锁的方法采用先来先服务
11.4.1死锁 事务永远不结束
预防死锁方法:
- 一次封锁法:一次将要使用的数据全部加锁:缺点,降低并发性
- 顺序封锁法:
死锁的诊断与解除
- 超时法
- 等待图法,存在回路,出现死锁#
11.5并发调度的可串行性
数据库管理系统对并发事务不同的调度可能产生不同的结果,串行调度时正确的
11.5.1 可串行化调度
11.5.2冲突 可串行化调度
冲突操作是指不同的事务对同一数据的读写和写写操作
如何使用封锁机制产生可串行化调度
11.6两段锁协议
调图时可串行化的,使用两段锁协议方法实现调度可串行化
两段锁:事务分为两个阶段对数据加锁和解锁
- 在读写操作之前,申请并获得对数据的封锁
- 释放一个锁之后,事务不在申请和获得任何其他封锁所
11.7 封锁的粒度
封锁对象的大小为粒度:逻辑单元:属性值,其集合,元组,关系,索引项。物理单元:叶,物理记录。
11.7.1 多粒度封锁
多粒度树,显示封锁,隐式封锁,检查是否冲突
11.7.2 意向锁
意向锁:如果对一节点加意向锁,说明节点的下层节点在被枷锁,对任意节点加锁时,必须对其上层节点加锁。
三种意向锁:is锁,ix锁 six锁