`
zchiml
  • 浏览: 43839 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DB2隔离级别

 
阅读更多

在DB2中,共有四种隔离级:RS,RR,CS,UR.以下对四种隔离级进行一些描述,同时附上个人做试验的结果。

1、读可靠性(RS-Read Stability)

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

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

个人笔记:

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

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

2、重复读(RR-Repeat Read)

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

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

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

个人笔记

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

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

3、游标可靠性(CS-Cursor Stability)

如果使用这种隔离级,在一个事务中,结果集中只有正在被读取的那一行(游标指向的行)将被加上NS锁,其他未被处理的行上不被加锁。这种隔离级只能保证正在被处理的行的值不会被其他并发的程序所改变。该隔离级是DB2缺省的隔离级。

个人笔记

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

4、未提交读(UR-Uncommitted Read) 生产环境读数据用!!

如果使用这种隔离级,对于只读操作,不加行锁。典型的只读操作包括:

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

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

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

个人笔记

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

总结

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

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

分享到:
评论

相关推荐

    DB2中的四个隔离级别

    DB2 inforcenter上的隔离级别介绍

    DB2 OLTP系统的物理设计最佳实践(中文版)

    隔离级别 45 应用程序死锁 46 性能和监控 47 最佳实践 49 数据库规模调整和容量管理 51 估算系统资源并设计一个均衡的系统 51 自调优内存管理器 STMM 54 DB2 配置顾问程序 55 最佳实践 57 可靠性 可用性和可伸缩性 ...

    深入解析DB2--高级管理,内部体系结构与诊断案例.part1.rar

    7.4 隔离级别与锁 7.5 最大化并发性 7.6 锁相关的性能问题总结 7.7 锁与应用程序开发 7.8 本章小结 第8章 索引设计与优化 8.1 索引概念 8.2 索引结构 8.3 理解索引访问机制 8.4 索引设计 8.5 索引创建原则与示例...

    db2数据库入门教程(官方中文版)

    第 1章 – DB2 Express-C是什么?..........................................................................................13 1.1免费开发、部署和分发… 无限制!.............................................

    db2数据库入门官方教程(中文版)

    第 1章 – DB2 Express-C是什么?..........................................................................................13 1.1免费开发、部署和分发… 无限制!.............................................

    DB2开发基础知识-存储过程开发

    一、数据类型 二、使用存储过程优点 三、存储过程结构 四、参数定义 五、变量定义 六、赋值语句 七、条件控制语句 八、循环语句 九、常用操作符 十、游标使用 十一、异常处理 ...十五、事物隔离级别

    DB2和 Oracle的并发控制(锁)的比较

    1 引言 在关系数据库(DB2,Oracle,Sybase,Informix和SQL Server)最小的恢复和交易单位为一个事务(Transactions),事务具有ACID(原子性,一致性,隔离性和永久性)特征。关系数据库为了确保并发用户在存取同一...

    comdb2:彭博的分布式 RDBMS

    它提供了多个隔离级别,包括快照和可序列化隔离。 读/写事务在任何节点上运行,客户端库透明地协商与可用的最低成本(延迟)节点的连接。 客户端库提供透明的重新连接。 Comdb2 的工作于 2004 年在 Bloomberg LP ...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    接口隔离原则 迪米特原则 设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 ...

    数据库系统-招标参数---模板.doc

    另一个是新事务隔离级别(快照),增强系统" " " "的并发管理 " " " "支持在同一个硬件服务器上运行多个数据库实例 " " " "支持同一个实例上运行多个数据库,同一管理控制" " " "台完成所有管理工作,工具易于理解、...

    程序员的SQL金典.rar

     10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段  10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  ...

    程序员的SQL金典6-8

     10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段  10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  ...

    程序员的SQL金典7-8

     10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段  10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  ...

    程序员的SQL金典4-8

     10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段  10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  ...

    程序员的SQL金典3-8

     10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段  10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  ...

    B站 MySQL学习随手记 全是满满的干货!

    业务级别的MySQL学习与使用 1、数据库分类 1. 关系型数据库(SQL) MySQL,Oracle,SQL Server,DB2,SQLlite 通过表和表之间的,行与列之间的关系进行数据的存储。(例如:学生信息表) 2. 非关系型数据库(NoSQL...

Global site tag (gtag.js) - Google Analytics