DB2隔离级别--可重复读
创始人
2024-07-15 11:20:33
0

下面为您介绍的DB2隔离级别,是可重复读级别,作为重要的DB2隔离级别之一,利用可重复读,不可能出现丢失更新、访问未落实的数据和幻像行的情况。

可重复读

可重复读(RR)会锁定应用程序在工作单元中引用的所有行。利用“可重复读”,在打开游标的相同工作单元内一个应用程序发出一个 SELECT 语句两次,每次都返回相同的结果。利用“可重复读”,不可能出现丢失更新、访问未落实的数据和幻像行的情况。

在该工作单元完成之前,“可重复读”应用程序可以尽可能多次地检索和操作这些行。但是,在该工作单元完成之前其他应用程序均不能更新、删除或插入可能会影响结果表的行。“可重复读”应用程序不能查看其他应用程序的未落实更改。

利用“可重复读”,将会锁定引用的每一行,而不仅仅是检索的那些行。执行了适当的锁定,因此其他应用程序不能插入或更新行(该行可能要添加到查询所引用的行的列表中,如果重新执行查询)。这将防止出现幻像行。例如,如果您扫描 10000 行并对它们应用谓词,尽管只有 10 行满足条件,但仍会锁定全部的 10000 行。
注: “可重复读”隔离级别确保在应用程序看到数据之前所有返回的数据都保持不变,即使使用了临时表或行分块也是如此。

由于“可重复读”可能获得和挂起大量锁定,因此这些锁定可能超出可作为 locklist 和 maxlocks 配置参数的有效结果的锁定数。为了避免锁定升级,优化器在认为很可能会发生锁定升级的时候,可能选择立即获得单个表级别锁定用于索引扫描。这就像数据库管理器代表您发出了一个 LOCK TABLE 语句一样。如果不想获得表级别锁定,确保有足够的锁定可用于该事务或使用“读稳定性”隔离级别。

评估引用约束时,在一些情况下,DB2 将在内部把对外部表进行扫描所使用的DB2隔离级别升级到“可重复读”(RR),而无论用户设置的DB2隔离级别是什么。这将导致其他锁定在落实之前一直被挂起,从而增大了出现死锁或锁定超时的可能性。为了避免出现这种情况,建议您创建仅包含一列或多列外键的索引,从而允许 RI 扫描使用此索引。
 

 

 

【编辑推荐】

DB2动态SQL的使用

DB2循环查询的实现

DB2查询管理实用程序

DB2信息目录中心简介

带您学习DB2数据仓库中心

 

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...