数据库事物并发---事物隔离机制
2012-05-03 17:28
148 查看
数据库事物并发---事物隔离机制
(2010-09-06 13:38:37)转载▼
标签:杂谈 |
ISOLATIONLEVELS
SQL规定了以下隔离级别:ReadUncommited: 读已提交的。
ReadCommited:仅读已提交的数据。显然,可以防止脏读。但是它不能保证此数据在本事务完成之前不被其他事务修改,所以有可能发生不可重复读现象。
ReadRepeatable:给本事务读的所有数据加上共享锁,这样可以防止不可重复读,因为其他事务无法在本事务完成之前修改这些数据。但是幻觉读仍有可能出现,因为另一个事务可以向该表中插入某些数据。
ReadSerializable: 仅读已串行化的数据,这表明,幻觉读是不可能出现的了。
数据库调度的特征:
基于可恢复性的调度,可恢复的调度(recoverableschedule):是指已提交的事务不应该发生回滚的调度,它可以分为以下几类:
层联回滚(Cascadingrollback)调度:未提交的事务从未提交的(失败)事务中读取了错误的数据(Dirty Read),必须回滚。
无层联回滚的:事务只读取已提交事务写的数据(Read Commited)。
严格调度(StrictSchedule):在写数据项的最后一个事务提交之后事务才能开始读/写该数据项。
基于可串行化的调度(略);
数据库并发控制实现技术:
加锁协议(Locking Protocol) :
可以加Read_Lock和Write_Lock(也就是以前讲的共享锁和互斥锁)。
Well-formed:一个事务是良形式的,若它不会去给一个已加锁的对象再次加锁,也不会对一个已经释放锁的对象再次释放锁。
为了保证事务的可串行性,事务必须遵循以下规则- 称作Two Phase LockingScheme(2PL),在这个协议里,食物可以分为两个阶段:
Growingphase: 只加锁,不释放锁(但是可以进行锁升级);
Shrinkingphase: 只释放锁,不加锁(但是可以进行锁降级);
所谓的锁升级(降级)是指对同一个对象的读锁变为写锁(或反过来)。若事务满足了这两个特征,便是可串行化的(Serializable):原因不难分析,简单的说,因为在一个事务在执行某个操作前必须得到其读/写对象的锁(在此之前不能释放锁),若不能得到就只有等待其他事务释放该锁(而其他事务一旦开始释放锁就不能再申请锁),故对于冲突的操作在两个不同的事务之间只能按一定顺序执行(在优先图中表现为没有环)-对于非冲突的操作则可以按任意次序执行。
这里还可以看到,满足2PL的调度能大量地减少并行度。并且在2PL中申请锁与释放锁这两个过程完全独立,与具体封锁的数据对象无关,所以2PL只能与串行执行集的一个子集等价,换句话说,2PL对于可串行化来说太严格了(2PLis 2 strict 4 serializablity)。
但是满足2PL
相关文章推荐
- 数据库事物并发---事物隔离机制
- 数据库并发机制及事务隔离机制
- 数据库事物隔离机制
- 数据库事物、隔离等级及数据库锁机制
- 数据库 事物 与 并发 事物隔离等级
- 数据库并发机制和事务的隔离级别详解
- 数据库并发机制和事务的隔离级别详解
- 数据库事务隔离级别和锁实现机制
- 数据库事物的特性和隔离级别
- 数据库事物的隔离级别
- 数据库的隔离机制
- 数据库锁机制及乐观锁,悲观锁的并发控制
- 数据库事物隔离级别通俗理解
- 数据库的并发问题以及数据库的隔离级别
- 数据库事物隔离级别
- 数据库事物隔离四种级别详解
- 如何处理大量数据并发操作(数据库锁机制详解)
- 数据库事物隔离级别 (藏)
- 数据库事物 jdbc事物 spring事物 隔离级别:脏幻不可重复读
- POSTGRESQL 数据库 事物隔离