下面为您介绍的DB2隔离级别,是可重复读级别,作为重要的DB2隔离级别之一,利用可重复读,不可能出现丢失更新、访问未落实的数据和幻像行的情况。
可重复读
可重复读(RR)会锁定应用程序在工作单元中引用的所有行。利用“可重复读”,在打开游标的相同工作单元内一个应用程序发出一个 SELECT 语句两次,每次都返回相同的结果。利用“可重复读”,不可能出现丢失更新、访问未落实的数据和幻像行的情况。
在该工作单元完成之前,“可重复读”应用程序可以尽可能多次地检索和操作这些行。但是,在该工作单元完成之前其他应用程序均不能更新、删除或插入可能会影响结果表的行。“可重复读”应用程序不能查看其他应用程序的未落实更改。
利用“可重复读”,将会锁定引用的每一行,而不仅仅是检索的那些行。执行了适当的锁定,因此其他应用程序不能插入或更新行(该行可能要添加到查询所引用的行的列表中,如果重新执行查询)。这将防止出现幻像行。例如,如果您扫描 10000 行并对它们应用谓词,尽管只有 10 行满足条件,但仍会锁定全部的 10000 行。
注: “可重复读”隔离级别确保在应用程序看到数据之前所有返回的数据都保持不变,即使使用了临时表或行分块也是如此。
由于“可重复读”可能获得和挂起大量锁定,因此这些锁定可能超出可作为 locklist 和 maxlocks 配置参数的有效结果的锁定数。为了避免锁定升级,优化器在认为很可能会发生锁定升级的时候,可能选择立即获得单个表级别锁定用于索引扫描。这就像数据库管理器代表您发出了一个 LOCK TABLE 语句一样。如果不想获得表级别锁定,确保有足够的锁定可用于该事务或使用“读稳定性”隔离级别。
评估引用约束时,在一些情况下,DB2 将在内部把对外部表进行扫描所使用的DB2隔离级别升级到“可重复读”(RR),而无论用户设置的DB2隔离级别是什么。这将导致其他锁定在落实之前一直被挂起,从而增大了出现死锁或锁定超时的可能性。为了避免出现这种情况,建议您创建仅包含一列或多列外键的索引,从而允许 RI 扫描使用此索引。
【编辑推荐】
DB2动态SQL的使用
DB2循环查询的实现
DB2查询管理实用程序
DB2信息目录中心简介
带您学习DB2数据仓库中心
文章名称:DB2隔离级别--可重复读
网站路径:http://www.shufengxianlan.com/qtweb/news20/474520.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联