并发控制

一 并发控制概述:

(1)事务是并发控制的基本单元。

(2)数据库中多个事务并发执行时,事务的隔离性和一致性可能会遭到破坏,DBMS需要对并发事务相互作用加以控制,即并发控制机制。

(3)并发操作带来的数据不一致性包括(T1和T2为事务):

*丢失修改:T1和T2同时修改数据,T2提交的结果修改了T1提交的结果,导致T1的修改丢失。

*不可重复读:T1读取数据后,T2执行修改操作,使T1无法再现前一次读取的结果。

*读"脏"数据:T1修改某一数据,并写回磁盘,T2读取同一数据后,T1由于某种原因撤销,这时T1已修改的数据恢复原值,T2读取的数据就与数据库中的数据不一致。

(4)并发控制技术:

*封锁(locking):商用数据库一般采用封锁方法。

*时间戳(Timestamp)

*等等。


二 封锁:实现并发控制的一个重要技术,但封锁会造成死锁和饥饿等现象。

(1)基本的封锁类型:

*排它锁(写锁)

*共享锁(读锁)

(2)封锁粒度:

*封锁粒度:封锁对象的大小。

*封锁粒度越大,并发度越小,系统开销也小;封锁粒度越小,并发度越高,系统开销越大。


三并发调度的可串行性:

(1)定义:多个事务并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度为“可串行化调度”。

(2)可串行化是并发事务正确调度的准则。按照这个准则一个给定的并发调度,当且仅当它是可串行化的,才认为是正确的调度。

(3)目前RDMS普遍采用两段锁协议(Two-Phase Locking)来实现并发调度的可串行性。若并发执行的所有事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。事务遵守两段锁协议时可串行化的充分条件。

(4)两段锁协议:指所有事务必须分两个阶段对数据项加锁和解锁。

*在对任何数据进行读、写操作之前,首先要申请并获得对数据的封锁。

*在释放一个封锁之后,事务不再申请和获得任何其他封锁。

(5)一次封锁法遵守两段锁协议,但是两段锁协议不要求必须一次将所有要使用的数据加锁,因此遵守两端锁协议的事务可能发生死锁。



四 死锁、活锁和饥饿:

(一)基本概念:

*死锁:是指两个或两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

*活锁(英文 livelock):指事务1可以使用资源,但它让其他事务先使用资源;事务2可以使用资源,但它也让其他事务先使用资源,于是两者一直谦让,都无法使用资源(数据库中的概念)。

*饥饿:是指如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁后,系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后,系统又批准了T4的请求......T2可能永远等待,这就是饥饿。

*解决活锁和饥饿的简单方法:先来先服务策略。


(二)死锁的处理方法:

(1)预防死锁(操作系统中广泛采用的预防策略的并不很适合数据库,RDBMS中解决死锁问题的采取检测和解除死锁的方法):

1.一次封锁法:要求每个事务都必须一次将所有要使用的数据全部加锁,否则就不能继续执行。

2.顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

(2)死锁的诊断与解除:

1.超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。

2.等待图法。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值