事务高度与并发控制
9.1 调度:定义在多个事务上的调度是这些事务的所有操作的一个执行序列,代表了这些操作的执行顺序;冲突操作:事务Ti 的操作Ii与事务Tj的操作Ij是冲突的,当且仅当Ii 和 Ij访问数据库中同一个数据项Q,并且Ii 和 Ij中至少有一个是写操作write(Q);冲突可串行:一个并发调度冲突等价于某个串行调度(判断一个并行调度是否正确)
死锁是指数据库系统中部分或全部事务由于无法获得对需要访问的数据项的控制权而处于等待状态,并且将一直等待下去的一种系统状态。
9.2 ACID:Atomicity原子性;Consistency一致性;Isolation隔离性;Durability持久性
9.3 1级加锁协议要求事务T在修改数据项Q之前必须先对Q加X锁,直到事务结束才释放该锁。事务结束包括正常结束(commit)和非正常结束(rollback)。但事务如果是只读Q而不对其进行修改,是不需要对Q加锁的。
2级加锁协议是在1级加锁协议基础上,要求事务T在读取数据项Q之前必须先对其加S锁,读完Q后可以立即释放S锁。
3级加锁协议则是在1级加锁协议基础上,要求事务T在读取数据项Q之前必须先对其加S锁,但是需要等到事务结束时才释放该S锁。
9.4 2阶段锁协议将每个事务的执行过程分为加锁阶段和解锁阶段。在加锁阶段,事务可以申请获得数据项上的任何类型的锁,但不允许释放任何锁。在解锁阶段,事务可以释放任何数据项上的任何类型的锁,但不能再申请任何锁。每个事务开始执行后就进入了加锁阶段。当第一次释放锁后,即转入解锁阶段。
9.5解决死锁主要采用死锁预防和死锁检测与恢复两类方法。
死锁预防利用死锁预防协议,通过破坏死锁产生的必要条件来避免系统进入死锁状态。
一次性加锁法;顺序加锁法
死锁检测与恢复则是允许系统进入死锁状态,并且定期检查系统是否发生死锁。当发现系统发生死锁后,采取相应的恢复机制使系统摆脱死锁状态。
9.6活锁产生的原因是在系统非死锁状态下,某些事务由于始终无法获得对所需访问的数据项的控制权而长期等待下去,无法继续执行。
9.7 锁粒度大:被加锁数据项少、事务并发执行度低、系统开销小;锁粒度小则反之
9.8 基于锁的并发控制技术的原理