DB2之隔离级别

文章来源:http://blog.csdn.net/msoso_______1988/article/details/9248535

  在DB2中,共有四种隔离级:RS,RR,CS,UR.以下对四种隔离级进行一些描述,同时附上个人做试验的结果。隔离级是影响加锁策略的重要环节,它直接影响加锁的范围及锁的持续时间。两个应用程序即使执行的相同的操作,也可能由于选择的隔离级的不同而造成加锁的结果不同。

  在DB2中,共有四种隔离级:RS,RR,CS,UR.以下对四种隔离级进行一些描述。

读可靠性(RS-Read Stability)
  如果使用这种隔离级,在一个事务中所有被读取过的行上都会被加上NS锁,直到该事务被提交或回滚,行上的锁才会被释放。这样可以保证在一个事务中即使多次读取同一行,得到的值不会改变。

  但其他事务可以插入,可以防止db2定义的不可重复读,但有幻读问题。即如果使用这种隔离级,在一个事务中,如果使用同样的搜索标准重新打开已被处理过的游标,则结果集可能改变。(可能会增加某些行,这些行被称为幻影行(Phantom))。这是因为RS隔离级不能阻止通过插入或更新操作在结果集中加入新行。

  个人笔记:

  ? 根据实际测试情况,RS模式下:查询完毕以后,满足条件的结果集中的记录被锁定,不满足条件的不被锁定。

  ? 可以对不满足条件的记录更新,也可以插入新的记录。其他人可以查询满足已经锁定的记录,但不可以更新。

重复读(RR-Repeat Read)
  如果使用这种隔离级,在一个事务中所有被读取过的行上都会被加上S锁,知道该事务被提交或回滚,行上的锁才会被释放。这样可以保证在一个事务中即使多次读取同一行,得到的值不会改变。

  另外,在同一事务中如果以同样的搜索标准重新打开已被处理过的游标,得到的结果集不会改变。重复读相对于读可靠性而言,加锁的范围更大。

  解决幻读。锁定读事务以任何方式引用的所有行,整个表加S锁。相当于serializable读写用锁互斥

  对于读可靠性,应用程序只对符合要求的所有行加锁,而对于重复读,应用程序将对所有被扫描过的行都加锁。例如,如果一个应用程序对一个表中的 10000行数据进行扫描,最终找到了100条符合搜索条件的结果行。如果该应用程序使用的是读可靠性隔离级,应用程序将只对这符合条件的100行加锁;如果该应用程序使用的是重复读隔离级,应用程序将对被扫描过的10000行都加锁。

  个人笔记

  ? 根据实际测试情况,RR模式下:查询完毕以后,不可以对不满足条件的进行更新,也不可以插入新记录。可能原因是:如果允许别人更新记录或者插入新记录的话,则可能造成原来结果集的破坏,重新读的时候和以前不同。

  ? select for update with rr/rs 是可以用来实现记录锁。是一种特殊情况。即便是RR,仍然可以对其他记录操作。

游标可靠性(CS-Cursor Stability)
  如果使用这种隔离级,在一个事务中,结果集中只有正在被读取的那一行(游标指向的行)将被加上NS锁,其他未被处理的行上不被加锁。这种隔离级只能保证正在被处理的行的值不会被其他并发的程序所改变。该隔离级是DB2缺省的隔离级。防止脏读。其他事务不能更新/删除游标当前所引用的行。可能出现db2定义的不可重复读和幻读。

  个人笔记

  仅仅在游标在该行的时候锁定,这是一种非常弱的隔离状态。

未提交读(UR-Uncommitted Read)
  如果使用这种隔离级,对于只读操作,不加行锁。典型的只读操作包括:

  ? SELECT语句的结果集只读(比如语句中包括ORDER BY子句);

  定义游标是指明起为FOR FETCH ONLY。

  该隔离级可以改善应用程序的性能,同时可以最大程度的允许并发。但是,应用程序的数据完整性将受到威胁。如果需要读取未提交的数据,该隔离级是唯一选择。

  个人笔记

  读的时候完全不受限制,对于同一行记录的完整性也无法保证。

  总结

  以上我们所提的隔离级的加锁范围和持续时间都是针对于读操作而言的。

  对于更改操作,被修改的行上会被加上X锁,不论使用何种隔离级,X锁直到提交或回滚之后才会被释放。

时间: 2024-10-12 17:17:15

DB2之隔离级别的相关文章

RS隔离级别导致的锁超时

客户某个数据库突然锁超时增多. 通过分析db2locktimeout文件, 发现90%的locktimeout的原因都是因为Read Stability隔离级别导致的.主要涉及的表:P_CUSTOM_ARCH_TABLE,P_CUSTOM_TABLE_ARCH_EXT,P_BUSI_QUERY,P_ALCMNG_PRO. 下面是对db2locktimeout.0.282904.2015-05-13-15-50-08文件的分析: Cursor Stability:游标稳定性隔离级别(db2默认隔离

浅谈DB2的四个隔离级别

隔离级别定义用于控制并发事务的行为,它决定在访问数据时数据是如何锁定的.如何与其他进程隔离的. 包括四个级别,级别从高到低: RR(可重复读取) RS(读取稳定性) CS(游标稳定性) UR(未提交的读取) 1.RR隔离级别:在此隔离级别下, DB2会锁住所有相关的纪录. 在一个SQL语句执行期间, 所有执行此语句扫描过的纪录都会被加上相应的锁.在一个SQL语句执行期间,所有执行此语句扫描过的纪录都会被加上相应的锁. 具体的锁的类型还是由操作的类型来决定, 如果是读取,则加共享锁: 如果是更新,

DB2隔离级别之RR/RS/CS/UR

1.RR隔离级别:在此隔离级别下, DB2会锁住所有相关的纪录. 在一个SQL语句执行期间, 所有执行此语句扫描过的纪录都会被加上相应的锁.在一个SQL语句执行期间,所有执行此语句扫描过的纪录都会被加上相应的锁. 具体的锁的类型还是由操作的类型来决定, 如果是读取,则加共享锁: 如果是更新, 则加独占锁.具体的锁的类型还是由操作的类型来决定,如果是读取,则加共享锁:如果是更新,则加独占锁. 由于会锁定所有为获得SQL语句的结果而扫描的纪录, 所以锁的数量可能会很庞大, 这个时候, 索引的增加可能

数据库:自己理解的“数据库事务隔离级别”

转载请注明出处: jiq?钦's technical Blog - 季义钦 引言:在网上搜了很多关于事务的文章,感觉单独来看都很难看懂,所以综合自己的理解写一篇我自己能理解的关于关系型数据库事务的文章. 一.事务特征 我们都知道数据库事务具备ACID特性: Atomic(原子性):一个事务要么成功,要么失败 Consistency(一致性):一致性代表了底层数据存储的完整性.事务执行前后数据库都必须处于一个合法的状态.什么才是一个合法的状态? 比如满足数据库的唯一性约束.数据类型验证.引用完整性

隔离级别

详细说明: 当多个用户访问同一数据库时会发生的现象介绍如下: 在单用户环境中,每个事务都是顺序执行的,而不会遇到与其他事务的冲突.但是,在多用户环境下,多个事务可以(而且常常)同时执行.因此每个事务都有可能与其他正在运行的事务发生冲突.有可能与其他事务发生冲突的事务称为交错的 或并行的 事务,而相互隔离的事务称为串行化 事务,这意味着同时运行它们的结果与一个接一个连续地运行它们的结果没有区别.在多用户环境下,在使用并行事务时,会发生四种现象: 丢失更新:这种情况发生在两个事务读取并尝试更新同一数

spring事务中隔离级别和spring的事务传播机制

Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要 么就不做.也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位.于是,人们就归纳出事务的第一个特性:原子性(Atomicity).我靠,一点都不神秘嘛. 特别是在数据库领域,事务是一个非常重要的概念,除了原子性以外,它还有一个极其重要的特性,那就是:一致性(Consistency).也就

数据库事务的四大特性和事务隔离级别

Reference: [1] http://www.cnblogs.com/fjdingsd/p/5273008.html [2] http://blog.csdn.net/fg2006/article/details/6937413 数据库事务四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全

数据库事务隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意:我们讨论隔离级别的场景,主要是在多个

数据库事务的隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意:我们讨论隔离级别的场景,主要是在多个