作者:怡智俊婷珮婷 | 来源:互联网 | 2023-02-04 11:26
当多个事务在数据库中并发执行时,数据的一致性可能受到破坏。系统有必要控制各事务之间的相互作用,这是通过并发控制机制的多种机制中的一种来实现的。避免事务"饿
当多个事务在数据库中并发执行时,数据的一致性可能受到破坏。系统有必要控制各事务之间的相互作用,这是通过并发控制机制的多种机制中的一种来实现的。
避免事务"饿死",授权加锁的条件:不存在在数据项Q上持有与M型锁冲突的锁的其他事务;不存在等待对数据项Q加锁且先于Ti申请加锁的事务。
常用的机制是各种***协议,时间戳排序,有效性检查,多版本机制。
***协议是一组阐明了事务合适对数据库中的数据项加锁解锁的规则。两阶段***协议仅在一个事务未曾释放任何数据项时允许该事务***新数据项。该协议保证可串行性,但不能避免死锁。在缺少有关数据项存取方式的信息是,两阶段***协议对保证可串行化来说不仅是必要的而且是充分的。
树形协议规则:1、Ti的首次加锁可以对任何数据项进行。2、此后Ti对数据项Q加锁的前提是Ti持有Q的父项上的锁。3、对数据项解锁可以随时进行。4、数据项被Ti加锁并解锁后,Ti不能再对该数据项加锁。
时间戳排序机制通过事先在每对事务之间选择一个顺序来保证可串行性。系统中的每个事务对应一个唯一的固定的时间戳。事务的时间戳决定了事务的可串行化顺序。这样,如果事务Ti的时间戳小于事务Tj时间戳,则该机制保证产生的调度等价于事务Ti出现在事务Tj之前的一个串行调度。该机制通过回滚违反该次序的事务来保证这一点。
Thomas写规则:假设事务Ti发出write(Q)操作:
1、若TS(Ti)与之关联。
防止死锁的一种方法是使用抢占与事务回滚;另一种方法是死锁检测与恢复机制。系统处于死锁状态当且仅当等待图中包含环
转自:http://www.cnblogs.com/ceys/archive/2012/03/16/2400745.html