技术开发 频道

DB2 V9.7当前已落实

    对 DB2_EVALUNCOMMITTED、 DB2_SKIPDELETED 和 DB2_SKIPINSERTED 的影响

    首先我们来看一下这几个注册表变量的用途:

    (1)DB2_SKIPINSERTED

    当该变量启用时,将允许 CS 或 RS 扫描跳过未提交的插入行。

    实际上在 DB2 V9.7 之前的版本中,正是通过该注册表变量提供了“当前已落实”的部分功能。如果启用“当前已落实”设置(扫描将直接跳过未提交的读),那么这个注册表变量无效。如果 DB2_SKIPINSERTED 设置成 OFF,则并不会使得“当前已落实”的跳过未提交读的功能失效。需要注意,“当前已落实”的跳过未提交读的行为在所有的 CS/RS 扫描中是有效的,除非将“当前已落实”改成别的值。

    (2)DB2_SKIPDELETED

    当该变量启用时,将允许 CS / RS 扫描跳过未提交的删除行和索引键(index updates = delete + insert) 。在早期 DB2 版本中 DB2_SKIPDELETED 生效时,未提交的已删除行将被跳过,但是更新和插入行还会导致锁等待。在 DB2 V9.7 中,这个参数被设置生效后,同时“当前已落实”也有效的情况下,未提交的已删除行将不再跳过(而是使用 Currently Committed version 替代进行运算)。但是,当“当前已落实”不可用时,未提交的已删除行还是会被跳过。

    (3)DB2_EVALUNCOMMITTED

    当该变量启用时,将允许 CS / RS 扫描对未落实的数据进行谓词求值。

    带来的影响是,它将进行表或索引访问扫描以延迟或避免行锁定(扫描时使用 UR),直到知道数据记录满足谓词求值为止。

    下面我们解释几个名词的含义:

    (1)隐式“当前已落实”:

    是指当数据库上的“当前已落实”设置启用,而请求没有显式的请求“当前已落实”(也就是数据库配置参数 CUR_COMMIT=ON,而且请求没有通过 BIND 或 PREP 命令将 CONCURRENTACCESSRESOLUTION 选项设置成 USE CURRENTLY COMMITTED 或 WAIT FOR OUTCOME)。

    (2)显式“当前已落实”:

    是指程序包中的语句通过 BIND 或 PREP 命令显式的请求“当前已落实”(通过 BIND 或 PREP 命令将 CONCURRENTACCESSRESOLUTION 选项设置成 USE CURRENTLY COMMITTED)。

    (3)“等待运行结果”(Wait For Outcome):

    是指程序包中的语句通过 BIND 或 PREP 命令显式的发出“等待运行结果”请求(通过 BIND 或 PREP 命令将 CONCURRENTACCESSRESOLUTION 选项设置成 WAIT FOR OUTCOME)。

    在游标稳定隔离级别(CS)下的所有只读操作,不管其使用了隐式“当前已落实”还是显式“当前已落实”,DB2_SKIPINSERTED 注册表变量都不适用,因为“当前已落实”已经包含了该功能,而 DB2_SKIPDELETED 和 DB2_EVALUNCOMMITTED 注册表变量也将无效,具体如表格 4 中第二列所示。

    在游标稳定隔离级别(CS)下的所有写操作和读稳定性隔离级别(RS)所有读 / 写操作,当其使用了隐式“当前已落实”时,DB2_SKIPINSERTED 注册表变量都不适用,因为“当前已落实”已经包含了该功能,而 DB2_SKIPDELETED 和 DB2_EVALUNCOMMITTED 注册表变量将继续有效,具体如表格 4 中第三列所示。

    在游标稳定隔离级别(CS)下的所有写操作和读稳定性隔离级别(RS)所有读 / 写操作,当其使用了显式“当前已落实”时,DB2_SKIPINSERTED 注册表变量都不适用,因为“当前已落实”已经包含了该功能,而 DB2_SKIPDELETED 和 DB2_EVALUNCOMMITTED 注册表变量也将无效,具体如表格 4 中第四列所示。

    在游标稳定隔离级别(CS)下的所有读 / 写操作和读稳定性隔离级别(RS)所有读 / 写操作,当其使用了“等待运行结果”(Wait For Outcome)时,DB2_SKIPINSERTED、DB2_SKIPDELETED 和 DB2_EVALUNCOMMITTED 注册表变量都将无效,具体如表格 4 中第五列所示。

表 4. “当前已落实”对一些注册表变量的影响

注册表变量隐式“当前已落实”;
显式“当前已落实”;
CS 只读操作;
隐式“当前已落实”;
CS 写操作;
RS 读 / 写操作;
显式“当前已落实”;
CS 写操作;
RS 读 / 写操作;
Wait For Outcome ;
CS 或 RS 下的读写操作;
DB2_SKIPINSERTED不适用(当前已落实已经包含该功能)不适用(当前已落实已经包含该功能)不适用(当前已落实已经包含该功能)NO
DB2_SKIPDELETEDNO(不适用)YESNONO
DB2_EVALUNCOMMITTEDNO(不适用)YESNONO

0
相关文章