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

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

2.RS隔离级别:此隔离级别的要求比RR隔离级别稍弱,此隔离级别下会锁定所有符合条件的纪录。 不论是读取, 还是更新, 如果SQL语句中包含查询条件, 则会对所有符合条件的纪录加相应的锁。不论是读取,还是更新,如果SQL语句中包含查询条件,则会对所有符合条件的纪录加相应的锁。 如果没有条件语句, 也就是对表中的所有记录进行处理,则会对所有的纪录加锁。如果没有条件语句,也就是对錶中的所有记录进行处理,则会对所有的纪录加锁。

3.CS隔离级别:此隔离级别仅锁住当前处理的纪录。

4.UR隔离级别:此隔离级别下,如果是读取操作,不会出现任何的行级锁。 对于非只读的操作,它的锁处理和CS相同。对於非只读的操作,它的锁处理和CS相同。

DB2默认的隔离级别是CS。 DB2默认的隔离级别是CS。 即游标稳定性。即游标稳定性。

在DB2中,共有四种隔离级:RS,RR,CS,UR

eg:db2 select * from topicis.dm_qylx with ur

UR:UR-Uncommitted Read 未提交读

是sql执行时的一种隔离级别,允许脏读,不加行锁

不带with UR的话,select count(1) 常见的是S锁! update 应该是X锁;应该会发生等待!

带上with ur,select count(1) 应该是IN锁, update 是x锁;刚好不会等待!

刚刚测试了下

C:\>db2 create table a(a int)

DB20000I SQL命令成功完成。

C:\>db2 insert into a values(1)

DB20000I SQL命令成功完成。

C:\>db2 commit

DB20000I SQL命令成功完成。

C:\>db2 +c select count(*) from a

1

-----------

1

1 条记录已选择。

这个时候的 lock 的情况是

C:\>db2pd -d test -lock

Database Partition 0 -- Database TEST -- Active -- Up 0 days 00:20:49

Locks:

Address TranHdl Lockname Type Mode Sts Owner

Dur HoldCount Att ReleaseFlg

0x05190450 2 53514C4332463041F12CF8E241 Internal P ..S G 2

1 0 0x00 0x40000000

在另外一个 db2cmd 中

C:\>db2 +c update a set a=2

DB20000I SQL命令成功完成。

这时的 lock 情况如下

C:\>db2pd -d test -lock

Database Partition 0 -- Database TEST -- Active -- Up 0 days 00:21:03

Locks:

Address TranHdl Lockname Type Mode Sts Owner

Dur HoldCount Att ReleaseFlg

0x051911E0 6 05000F00040000050000000052 Row ..X G 6

1 0 0x00 0x40000000

0x05190450 2 53514C4332463041F12CF8E241 Internal P ..S G 2

1 0 0x00 0x40000000

0x05190300 6 53514C4332463041F12CF8E241 Internal P ..S G 6

1 0 0x00 0x40000000

0x051911B0 6 05000F00000000000000000054 Table .IX G 6

1 0 0x00 0x40000000

__________________

The More You Know The More You‘re Worth

http://macrozeng.itpub.net

macrozeng#itpub.net

同样的测试加上 for read only with ur

C:\>db2 commit

DB20000I SQL命令成功完成。

C:\>db2 +c select count(*) from a for read only with ur

1

-----------

1

1 条记录已选择。

这时的 lock 情况如下

C:\>db2pd -d test -lock

Database Partition 0 -- Database TEST -- Active -- Up 0 days 00:27:56

Locks:

Address TranHdl Lockname Type Mode Sts Owner

Dur HoldCount Att ReleaseFlg

0x05191B70 2 53514C4332463041F12CF8E241 Internal P ..S G 2

1 0 0x00 0x40000000

在另外一个 db2cmd 中

C:\>db2 +c update a set a=2

DB20000I SQL命令成功完成。

这时的 lock 情况如下

C:\>db2pd -d test -lock

Database Partition 0 -- Database TEST -- Active -- Up 0 days 00:28:23

Locks:

Address TranHdl Lockname Type Mode Sts Owner

Dur HoldCount Att ReleaseFlg

0x05190330 6 05000F00040000050000000052 Row ..X G 6

1 0 0x00 0x40000000

0x05191B70 2 53514C4332463041F12CF8E241 Internal P ..S G 2

1 0 0x00 0x40000000

0x05190570 6 53514C4332463041F12CF8E241 Internal P ..S G 6

1 0 0x00 0x40000000

0x05191240 6 05000F00000000000000000054 Table .IX G 6

1 0 0x00 0x40000000

小结:

<span style="font-size:18px;"><strong><span style="font-size:18px;">1、ur(Uncommited Read):就是俗称“脏读“,在没有提交数据的时候能够读到更新的数据;即select数据时,无需等待正在对数据进行的update操作。</span></strong></span>
<span style="font-size:18px;"><strong><span style="font-size:18px;">
2、cs(Cursor Stability):在使用游标稳定性隔离级别时,一个事务的结果集中只有正在被读取的那一行(游标指向的行)会被加上NS锁,其他未被处理的行上不被加锁。这种隔离级别只能保证正在被处理的行的值不会被其他并发的程序所改变。该隔离级别是DB2默认的隔离级别。可以避免脏读的发生,但无法避免不可重复读和幻读的情况发生。</span></strong></span>
<span style="font-size:18px;"><strong><span style="font-size:18px;"></span><span style="font-size:18px;">
3、rs(Read Stability):在一个事务中进行查询时,不允许读取其他事务update结果集中的数据,允许读取到其他事务提交的新增数据。会锁定结果集中的所有行,会解决不可重复读问题,但无法解决幻读的问题。</span></strong></span>
<span style="font-size:18px;"><strong><span style="font-size:18px;">
4、rr(Repeatable Read):在一个事务中进行查询时,不允许任何对这个查询表的数据修改。对该表的操作彻底为序列化的形式,效率最低,可避免任何问题。</span></strong></span>


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

时间: 2024-11-14 07:09:01

DB2隔离级别之RR/RS/CS/UR的相关文章

DB2 SQL RR/RS/CS/UR四个级别《转载》

1.RR隔离级别:在此隔离级别下, DB2会锁住所有相关的纪录.在一个SQL语句执行期间,所有执行此语句扫描过的纪录都会被加上相应的锁.具体的锁的类型还是由操作的类型来决定,如果是读取,则加共享锁:如果是更新,则加独占锁.由於会锁定所有為获得SQL语句的结果而扫描的纪录,所以锁的数量可能会很庞大,这个时候,索引的增加可能会对SQL语句的执行有很大的影响,因為索引会影响SQL语句扫描的纪录数量. 2.RS隔离级别:此隔离级别的要求比RR隔离级别稍弱,此隔离级别下会锁定所有符合条件的纪录.不论是读取

查询mysql事务隔离级别

查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava 1.查看当前会话隔离级别 select @@tx_isolation; 2.查看系统当前隔离级别 select @@global.tx_isolation; 3.设置当前会话隔离级别 set session transaction isolatin level repeatable read; 4.设置系统当前隔离级别 s

MySQL Transaction--RR事务隔离级别下加锁测试

============================================================================== 按照非索引列更新 在可重复读的事务隔离级别下,在非索引列上进行更新和删除会对所有数据行进行加锁,阻止其他会话对边进行任何数据的增删改操作. 如果更新或删除条件为c3=4且c3列上没有索引则: 1.不允许其他会话插入任意记录,因为所有记录的主键索引上存在X排他锁,无法申请插入意向X锁(lock_mode X insert intention

数据库事务、事务隔离级别以及锁机制详解

以下主要以MySQL(InnoDB引擎)数据库为讨论背景,纯属个人学习总结,不对的地方还请指出! 什么是事务? 事务是作为一个逻辑单元执行的一系列操作,要么一起成功,要么一起失败.一个逻辑工作单元必须有四个属性,称为 ACID(原子性.致性.隔离性和持久性)属性,只有这样才能成为一个事务. 数据库事物的四大特性(ACID): 1)原子性:(Atomicity) 务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行. 2)一致性:(Consistency) 事务在完成时,必须使所有的

SpringBoot 系列教程之事务隔离级别知识点小结

SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上,并通过实例演示不同的事务隔离级别下,脏读.不可重复读.幻读的具体场景 I. 基础知识 在进入正文之前,先介绍一下事务隔离级别的一些基础知识点,详细内容,推荐参考博文 mysql 之锁与事务 1. 基本概念 以下基本概念源于个人理解之后,通过简单的 case 进行描述,如有问题,欢迎拍砖 更新丢失

浅谈DB2的四个隔离级别

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

DB2之隔离级别

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

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默认隔离

RR隔离级别下锁情况(探究gap锁和行锁)

!!!我的数据库演示版本为5.5,以后会追加最新数据库的演示版本 间隙锁(GAP Lock)时InnoDB在可重复读下的隔离级别下为了解决幻读问题引入的锁机制.幻读存在的问题是因为在新增或者更新时如果进行查询,会出现不一致的现象,这时单纯的使用行锁无法满足我们的需求,我们需要对一定范围的数据加锁,防止幻读. 可重复读隔离级别就是数据库通过行锁和间隙锁(不要搞混gap lock和next-key lock)共同组成来实现的,在网上抄了一下加锁的规则,然后自己进行一下验证: 1.加锁的基本单位是(n