三级封锁协议 一级封锁协议加上事务T对要读取的数据加S锁,并直到事务结束才释放。 除了可以防止丢失修改和不读“脏”数据之外,还进一步防止了不可重复读。 三级封锁协议示例 可重复读 不同级别的封锁协议总结 8.2.4 活锁和死锁 并发控制的封锁方法可能会引起活锁和死锁等问题。 活锁 避免活锁 简单方法是采用先来先服务的策略。 当多个事务请求封锁同一数据对象时,数据库管理系统按先请求先满足的事务排队策略,当数据对象上的锁被释放后,让事务队列中第一个事务获得锁。 死锁 两个事务相互等待对方先释放资源,则会造成死锁。 预防死锁的方法 一次封锁法:每个事务一次将所使用数据全部加锁。 存在的问题 降低系统并发度 难于事先精确确定封锁对象 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序封锁。 存在的问题 维护成本:数据库系统中封锁的数据对象极多,并且在不断地变化。 难以实现:很难事先确定每一个事务要封锁哪些对象。 死锁的诊断——超时法 超时法。如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。 优点是实现起来比较简单, 缺点是可能产生误判的情况: 如果事务因某些原因造成等待时间比较长,超过了规定的等待时限,则系统会误认为发生了死锁。 若时限设置的比较长,则不能对发生的死锁进行及时的处理。 死锁的诊断——等待图法 是一个有向图G=(T,U)。T为结点的集合,每个结
原创力文档

文档评论(0)