赞
踩
事务是并发控制的基本单位
并发操作带来的数据不一致性
R(x):读数据x
W(x):写数据x
丢失修改
T2的提交结果破坏了T1的提交结果,导致T1的修改被丢失
不可重复读
读脏数据
调度:“事务集”中的一串有序操作集,一个事务中操作在调度中的顺序应该于他们在事务中的顺序一致
每个事务最后的行动:COMMIT和ROLLBACK
并发控制的主要技术
避免活锁:采取先来先服务原则
产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待现象
解决死锁:
死锁的诊断
死锁的解除
选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续进行下去
可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。
可串行性是并发事务正确调度的准则
冲突操作:不同的事务对同一个数据的读写操作和写写操作,其他不冲突
冲突可串行化调度:一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度
冲突可串行化一定是可串行化调度,可串行化不一定冲突可串行化
盲目写:在执行W(Q)之前没有执行R(Q)的操作,存在于任何不是冲突可串行化的视图可串行化调度中
视图可串行化:两个调度每个事务都读取相同数据从而进行相同的计算
第一阶段:获得封锁,也称为扩展阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁
第二阶段:释放封锁,也称为收缩阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁
若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的
一次封锁发遵守两段锁协议
两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁
封锁对象的大小称为封锁粒度
封锁的对象:逻辑单元(属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库),物理单元(页、物理记录)
多粒度封锁中一个数据对象可能以两种方式封锁:
对某个数据对象加锁,系统要检查
目的:提高对某个数据对象加锁时系统的检查效率
对任一结点加基本锁,需要对上层结点加意向锁
意向锁类型:
具有意向锁的多粒度封锁方法
例如:事务T1要对关系R1加S锁
- 要首先对数据库加IS锁
- 要检查数据库和R1是否已加了与S不相容的锁(X或IX或SIX)
- 不再需要搜索和检查R1中的元组是否加了不相容的锁(X锁)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。