(DB2隔离级别和锁.docVIP

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(DB2隔离级别和锁

深入解析 DB2高级管理、内部体系结构与诊断案例 第 6 章 我们在进行客户支持时遇到最多的话题之一就是锁。“为什么 DB2 锁住了这个表、行或者对象?”,“这个锁会阻塞多长时间及为什么?”;“为什么出现了死锁?”,“我的锁请求在等待什么?”,诸如此类问题等等。更仔细地分析一些常见的锁示例可以说明 DB2 锁定策略背后的原则。在国内很多 DB2 用户都会碰到有关锁等待、死锁和锁升级等锁相关的问题,本章将会对这些问题以及解决方法做详细的讲解。 本章主要讲解如下内容: 隔离级别和锁 加锁总结 乐观锁 内部锁 设置锁相关的注册变量 6.1? 隔离级别和锁 要维护数据库的一致性和数据完整性,同时又允许多个应用程序同时访问一个数据库,将这样的特性称为并发性。 DB2 数据库尝试强制实施并发性的方法之一是使用隔离级别,它决定在第一个事务访问数据时,如何对其他事务锁定或隔离该事务所使用的数据。 DB2 使用下列隔离级别来强制实施并发性: 可重复读 (Reapeatable Read,RR) 读稳定性 (Read Stability,RS) 游标稳定性 (Cursor Stability,CS) 未提交的读 (Uncommitted Read,UR) 隔离级别是根据称为现象 (Phenomena) 的三个禁止操作序列来声明的: 脏读 (Dirty Read):在事务 A 提交修改结果之前,其他事务即可看到事务A的修改结果。 不可重复读 (Non-Repeatable Read):在事务A提交之前,允许其他事务修改和删除事务A涉及的数据,导致事务A中执行同样操作的结果集变小。 幻像读 (Phantom Read):事务A在提交查询结果之前,其他事务可以插入或者更改事务 A 涉及的数据,导致事务 A 中执行同样操作的结果集增大。 数据库并发性 ( 可以同时访问同一资源的事务数量 ) 因隔离级别不同而有所差异,可重复读隔离级别可以防止所有现象,但是会大大降低并发性。未提交读隔离级别提供了最大的并发性,但可能会造成“脏读”、“幻像读”或“不可重复读”现象。 DB2 默认的隔离级别是 CS 。 6.1.1? 可重复读 可重复读隔离级别是最严格的隔离级别。在使用它时,一个事务的操作结果完全与其他并发事务隔离,脏读、不可重复读、幻像读都不会发生。当使用可重复读隔离级别时,在事务执行期间会共享 (S) 锁定该事务以任何方式引用的所有行,在该事务中多次执行同一条 SELECT 语句,得到的结果数据集总是相同的。因此,使用可重复读隔离级别的事务可以多次检索同一行集,并可以对它们执行任意操作,直到提交或回滚操作终止事务。但是,在事务提交前,不允许其他事务执行会影响该事务正在访问的任何行的插入、更新或删除操作。为了确保这种行为,需要锁定该事务所引用的每一行—— 而不是仅锁定被实际检索或修改的那些行。因此,如果一个表中有 1000 行,但只检索两行,则整个表 (1000 行,而不仅是被检索的两行 ) 都会被锁定。输出结果如下: C:\db2 +c select empno,firstnme,salary from employee where empno between 000010 and 000020 withrrEMPNO FIRSTNME SALARY 000010 CHRISTINE 152750.00 000020 MICHAEL 94250.00 2 条记录已选择。 我们通过“ get snapshot for locks on sample ”命令来监控表加锁情况,输出结果如下: C:\db2 update monitor switches using lock on DB20000I UPDATE MONITOR SWITCHES 命令成功完成。 C:\db2 get snapshot for locks on sample | more 略 锁定列表 锁定名称 = 0x020006000E0040010000000052 锁定属性 = 0 发行版标志 = 0 锁定计数 = 1 挂起计数 = 0 锁定对象名 = 对象类型=表 表空间名= USERSPACE1表模式= DB2ADMIN表名= EMPLOYEE方式= S --注:虽然读取了两行,但是整个表加S锁 如果使用这种隔离级别,不管你从表中读多少数据,整个表上都加 S 锁,直到该事务被提交或回滚,表上的锁才会被释放。这样可以保证在一个事务中即使多次读取同一行,都会得到相同结果集。另外,在同一事务中如果以同样的搜索标准重新打开已被处理过的游标,那么得到的结果

文档评论(0)

jishu9527 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档