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的更多相关文章

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

    1.RR隔离级别:在此隔离级别下, DB2会锁住所有相关的纪录.在一个SQL语句执行期间,所有执行此语句扫描过的纪录都会被加上相应的锁.具体的锁的类型还是由操作的类型来决定,如果是读取,则加共享锁:如 ...

  2. DB2隔离级别

    四.隔离级别与锁 数据库是利用锁和隔离级别来共同处理数据库的并发的.DB2数据库用来尝试实施并发性的方法之一是通过使用隔离级别,它决定在第一个事务访问数据时,如何对其他事务锁定或隔离该事务所使用的数据 ...

  3. DB2之隔离级别和锁的论述

    在DB2数据库中, 是通过行级锁和表级锁协调作用来提供较好的并发性, 同时保证数据库中数据的安全. 在DB2中缺省情况下使用行级锁(当然需要IS/IX锁配合),只有当出现锁资源不足, 或者是用命令指定 ...

  4. MySQL 中隔离级别 RC 与 RR 的区别

    1. 数据库事务ACID特性 数据库事务的4个特性: 原子性(Atomic): 事务中的多个操作,不可分割,要么都成功,要么都失败: All or Nothing. 一致性(Consistency): ...

  5. MySQL默认隔离级别为什么是RR

    曾多次听到“MySQL为什么选择RR为默认隔离级别”的问题,其实这是个历史遗留问题,当前以及解决,但是MySQL的各个版本沿用了原有习惯.历史版本中的问题是什么,本次就通过简单的测试来说明一下. 1. ...

  6. Mysql死锁问题解决方式 & 聚簇索引、隔离级别等知识

    参考了这篇文章:http://www.cnblogs.com/LBSer/p/5183300.html  <mysql死锁问题分析> 写的不错. 如果Mysql死锁,会报出: 1.1 死锁 ...

  7. Mysql隔离级别,锁与MVCC

    关键词:事务,ACID,隔离级别,MVCC,共享锁,排它锁 阅读本文前请先阅读http://hedengcheng.com/?p=771 http://www.hollischuang.com/arc ...

  8. 浅谈MySQL事务及隔离级别

    目录 1.什么是事务 2.事务的ACID属性 2-1.原子性(Atomicity) 2-2.一致性(Consistency) 2-3.隔离性(Isolation) 2-4.持久性(Durability ...

  9. 查询mysql事务隔离级别

    查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava   1.查看当前会话隔离 ...

随机推荐

  1. JS冲刺

    1.简单/复杂数据类型1)基本数据类型把数据名和值直接存储在栈当中复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储属性及值,访问时先从栈中获取地址,再到堆中拿出相应的值简单数据类型:number ...

  2. poj3087 Shuffle'm Up(bfs)

    http://poj.org/problem?id=3087 注意复制字符串的时候,要在末尾加上'\0',否则导致strcmp出错. 还有就是开数组大小的时候看清楚一点,别开错了debug了好久. # ...

  3. centos7安装redis设置开机启动

    1. 首先下载redis源码,并使用tar进行解压缩 wget http://download.redis.io/releases/redis-4.0.8.tar.gztar xvzf redis-4 ...

  4. 09、高级编程之基于排序机制的wordcount程序

    package sparkcore.java; import java.util.Arrays; import java.util.Iterator; import org.apache.spark. ...

  5. commit 冲突

    git status or repo sync . 时看到如下的提示: error: packages/apps/app/: branch alpha is published (but not me ...

  6. 时间序列分析 异常分析 stl

    https://blog.csdn.net/snowdroptulip/article/details/79125912 https://www.cnblogs.com/runner-ljt/p/52 ...

  7. [C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题

    作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持"Add As Link"方式 ...

  8. Python的虚拟机安装已经如何配置Scrapy for Mac

    时间:2018年2月21日 因为时间问题,以下笔记就粗略记录.仅作为个人笔记为用 安装virtualenv和virtualenvwrapper 如何安装的细节下面这篇也有介绍,包括如何使用切换虚拟机也 ...

  9. Docker 国内仓库和镜像

    Docker 国内仓库和镜像 由于网络原因,我们在pull Image 的时候,从Docker Hub上下载会很慢...所以,国内的Docker爱好者们就添加了一些国内的镜像(mirror),方便大家 ...

  10. 关于在最新的 Visual Studio 2017 版本中使用 Web Deploy 遇到的 SSL 连接错误

    错误信息: 无法完成向远程代理 URL 发送请求.请求被中止: 未能创建 SSL/TLS 安全通道. 原因分析: 最新版本的 Visual Studio 中,已经抛弃了 https 协议中旧版 SSL ...