DB2四种隔离级别

这两天系统调优,DB2数据库访问总是有所瓶颈。
DB2隔离即是一些锁定策略,有赖于隔离级别的选择,可能在一个程序中收到不同的数据库锁定行为。DB2提供了不同的保护级别来隔离数据。
一、未落实的读(UR)
未落实的读亦称“脏读”,是最低的隔离级别,并且提供最高的并行性。除非另一个程序企图删除(drop)或者更改(alter)整个表,否则读操作时没有行锁定。而修改(update)操作与游标稳定性级别相同。
此隔离级别仍存在的问题:未落实的读,不可重复读,幻象。
此隔离级别所防止的问题:丢失更新。
二、游标稳定性(CS)
游标稳定是默认的隔离级别,提供了低程度的锁定。在这一隔离级别中,游标的“当前”行是锁定的。如果该行只是被读,锁定会一直持续到一个新行被访问或者该工作单元终止。如果该行被修改,锁定会一直持续到该工作单元终止。
此隔离级别仍存在的问题:不可重复读,幻象。
此隔离级别所解决的问题:丢失更新,未落实的读。
三、读稳定性(RS)
使用读稳定性,在同一个工作单元中的一个程序进程所检索的全部行都会被锁定。对于一个给定的游标,它要锁定所有与结果集匹配的行,例如,如果你有一个含1000行的表并且查询返回10行,那么只有那10行会被锁定。读稳定性使用中等级别的锁定。
此隔离级别仍存在的问题:幻象。
此隔离级别所解决的问题:丢失更新,未落实的读,不可重复的读。
四、可重新性(RR)
可重复读是最高的隔离级别,提供了最大程度的锁定和最少的并行。产生结果集的所有行都会被锁定,也就是说,即使不必出现在最终结果集中的行也会被锁定。在此该工作单元结束前,任何其它程序都不能修改,删除或插入一个会影响结果集的行。重复读确保程序在一个工作单元中多次进行的同一项查询都返回结果。
隔离级别通常被定义在会话或程序级别,可以通过WITH {隔离级别}子句设定,形如:
SELECT …… WITH {UR | CS | RS | RR}

猜你喜欢

转载自xiyuhanfei.iteye.com/blog/2232478