DB2隔离级别--可重复读

数据库
DB2隔离级别中的可重复读级别,会锁定应用程序在工作单元中引用的所有行,下面将为您介绍该隔离级别相关的知识,供您参考。

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

可重复读

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

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

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

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

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

 

 

【编辑推荐】

DB2动态SQL的使用

DB2循环查询的实现

DB2查询管理实用程序

DB2信息目录中心简介

带您学习DB2数据仓库中心

 

 

责任编辑:段燃 来源: 互联网
相关推荐

2024-05-13 11:46:33

MySQL数据库

2021-06-11 16:59:41

MySQLRepeatableRead

2010-09-30 16:41:36

DB2隔离级别

2010-09-30 16:35:34

DB2隔离级别

2010-08-05 09:14:29

DB2隔离级别

2010-11-03 13:50:49

DB2删除重复数据

2015-10-23 16:40:21

DB2删除数据

2024-03-11 00:00:00

mysqlInnoDB幻读

2023-11-01 14:13:00

MySQL事务隔离级别

2019-12-24 14:50:01

MySQL可重复读数据库

2022-06-29 11:01:05

MySQL事务隔离级别

2020-07-02 08:22:56

MySQL间隙锁过行锁

2022-01-03 07:18:05

脏读幻读 MySQL

2010-07-29 10:30:41

DB2隔离级

2010-09-30 10:29:56

DB2删除重复记录

2010-08-26 11:37:38

DB2命令

2010-07-30 14:07:18

DB2隔离级

2010-11-03 15:49:32

DB2删除表

2010-08-06 14:08:44

DB2隔离级解读

2010-08-20 12:44:25

DB2 CM
点赞
收藏

51CTO技术栈公众号