DB2隔离级别--可重复读_DB2_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > DB2 > DB2隔离级别--可重复读

DB2隔离级别--可重复读

 2010/11/8 21:26:13    程序员俱乐部  我要评论(0)
  • 摘要:下面为您介绍的DB2隔离级别,是可重复读级别,作为重要的DB2隔离级别之一,利用可重复读,不可能出现丢失更新、访问未落实的数据和幻像行的情况。可重复读可重复读(RR)会锁定应用程序在工作单元中引用的所有行。利用“可重复读”,在打开游标的相同工作单元内一个应用程序发出一个SELECT语句两次,每次都返回相同的结果。利用“可重复读”,不可能出现丢失更新、访问未落实的数据和幻像行的情况。在该工作单元完成之前,“可重复读”应用程序可以尽可能多次地检索和操作这些行。但是
  • 标签:DB2隔离级别

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

可重复读

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

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

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

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

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

发表评论
用户名: 匿名