- 论坛徽章:
- 0
|
这里只是针对CS这种隔离级别为例进行分析,对于其它的RS,RR,UR同理,并且对于锁的兼容性可以参考db2 reference.
对于CS 模式隔离级别情况下,不能读到脏数据,但不能够保证重复读和出现幻影行的现象。下面通过锁的原理来具体分析一下DB2是怎样实现不读到脏数据的。
1) 在CS的隔离级别下:对于只读操作和模糊读操作是(IS/NS)锁(对于意图锁都是表级别的,如:IS ,SIX,IX)。现在以一个作业A的查询、插入、删除、更新为例,而另外一个作业B在执行查询。
2) 当A执行只读查询时或更新查询时,对表加IS锁和IX锁,扫描的行加
NS锁和U锁(NS锁表示应用程序本身和其他应用程序可读,但不能够更改,RS,CS模式下用S锁替代,U锁其他应用程序只能读,不能够进行更改) 。
而B作业已做了更改删除(都是IX/X锁),插入操作(IX/W)
对于表锁而言,IX只与IS , IN 兼容所以只能是对A作业表的只读查询。对于行来说,B更改时加了X锁,所以只有IN可以兼容,所以只有为提交读的作业可见。所以A看不见B的更改。那么B加了W(弱排它锁),只与NW,IN锁兼容所以对于只读的S锁不兼容所以看不见该记录。但是如果作业A在不加键字的情况下扫描会等待B对该行释放,使用谓词的情况也会如此。若以RID方式则会返回数据。
注意: CS模式下,锁住当前行为X,扫描为U,然后释放该行锁。表锁不释放。 |
|