·11.1 并发控制概述11.2 封锁(Locking)
·11.3 活锁和死锁
·11.4 并发调度的可串行性
·11.5 两段锁协议
·11.6 封锁的粒度
11.1 并发控制概述11.2 封锁(Locking)
·多事务执行方式 :
·(1)事务串行执行
·(2)交叉并发方式
·(3)同时并发方式
·并发操作带来的数据不一致性:
·丢失修改(lost update)
·不可重复读(non-repeatable read)
·读“脏”数据(dirty read)
·并发控制的主要技术:
·封锁(Locking)
(商用的DBMS一般都采用封锁方法)
·时间戳(Timestamp)
·乐观控制法
·基本封锁类型:
·
排它锁(Exclusive lock,简记为X锁)
·共享锁(Share lock,简记为S锁)
·封锁协议(Locking Protocol)
·常用的封锁协议:三级封锁协议。
·一级封锁协议
·二级封锁协议
·一级封锁协议+事务T在读取数据R前必须先加S锁,读完后不等事务结束即可释放S锁。
·二级封锁协议可以防止丢失修改和读“脏”数据。
·在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能避免不可重复读。
·三级封锁协议
·三级封锁协议 + 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
·SET TRANSACTION ISOLATION LEVEL
·READ UNCOMMITTED
·READ COMMITTED
·REPEATABLE READ
·SERIALIZABLE
活锁和死锁
避免活锁
采用先来先服务的策略(队列)
解决死锁
·1. 采取一定措施预防死锁的发生。
2. 允许死锁发生,采取一定方法诊断死锁、解除死锁。
·死锁的预防
·一次封锁法
·要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行
·一次封锁法存在的问题:
·将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并发度。
·顺序封锁法:
·预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
·顺序封锁法存在的问题
·数据库系统中可封锁的数据对象极其众多,而且还在不断变化,要维护这样极多而且变化的资源的封锁顺序非常困难,成本很高。
事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。
·死锁的诊断
·死锁的解除
·选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。