性能变量

可设置性能变量以改进数据库进程,例如存取方案优化、内存调整操作和操作资源策略。

DB2_ALLOCATION_SIZE
  • 操作系统:所有操作系统
  • 缺省值:128 KB,范围: 64 KB - 256 MB
  • 指定缓冲池的内存分配大小。

    为此注册表变量设置较高的值可能具有下列优点:将需要更少的分配以达到缓冲池的期望内存量。

    为此注册表变量设置较高的值可能会增加成本,这是因为如果缓冲池的更改量不是分配大小的倍数,那么会浪费内存。 例如,如果 DB2_ALLOCATION_SIZE 的值为 8 MB,而缓冲池减少了 4 MB,那么由于不能释放整个 8 MB 段,所以这 4 MB 将会浪费。

注: 不推荐使用 DB2_ALLOCATION_SIZE ,在以后的发行版中可能会将其除去。
DB2_APM_PERFORMANCE
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 将此变量设置为 ON 来启用存取方案管理器 (APM) 中与性能相关的更改,这些更改将影响查询高速缓存(程序包高速缓存)的行为。 通常建议不要对生产系统使用这些设置。 它们会引入一些限制,例如,可能会出现包外高速缓存错误和/或增加内存使用量。

    DB2_APM_PERFORMANCE 设置为 ON 也会启用无包锁定方式。 此方式允许全局查询高速缓存运行,而不必使用程序包锁定,这些锁定是内部系统锁定,可以保护高速缓存的程序包条目不会被移除。 NO PACKAGE LOCK 方式可能会使性能有较小的提高,但它不允许执行某些数据库操作。 这些被禁止的操作可能包括:使包无效的操作、使包不起作用的操作、PRECOMPILEBINDREBIND

DB2ASSUMEUPDATE
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 启用时,此变量允许 Db2® 数据库系统假定正在更改 UPDATE 语句中提供的所有固定长度列。 这使得 DB2 数据库系统无需将现有列值与新值进行比较就可以确定实际上是否正在进行更改。 当为更新提供了一些列(例如,在 SET 子句中)但是实际上没有进行修改时,使用此注册表变量会导致更多日志记录和索引维护。

    DB2ASSUMEUPDATE 注册表变量的激活在 db2start 命令上有效。

DB2_AVOID_LOCK_ESCALATION
  • 操作系统:所有操作系统
  • 缺省值:OFF(在 DB2_WORKLOAD=SAP 时为 ON),值:ONOFF
  • DB2_AVOID_LOCK_ESCALATION 注册表变量为 ON 时,不会执行锁定升级。 反而会对请求锁定(通常导致锁定升级)的应用程序返回 SQL0912N。 该应用程序能够执行 COMMITROLLBACK,它们将释放此应用程序持有的锁定。 此变量可在不重新启动实例的情况下联机更新。
  • 此变量在 V11.1.2.2 和更新发行版中可用。
  • 对此变量的更改不需要重新启动数据库实例。
DB2_AVOID_PREFETCH
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 指定在崩溃恢复期间是否应使用预取。 如果 DB2_AVOID_PREFETCH =ON,那么不使用预取。
DB2_BACKUP_USE_DIO
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 指定操作系统是否对备份和装入复制映像进行高速缓存。 缺省行为是对该映像文件进行高速缓存。 如果 DB2_BACKUP_USE_DIO 设置为 ON,那么备份或装入复制映像文件直接写至磁盘(绕过文件高速缓存)。

    将此变量设置 ON 可能会让操作系统更好地利用内存资源,因为对备份或装入复制映像文件进行高速缓存没有任何好处。 对于 Linux® 平台而言,这种性能影响将具有最大的优势。 但是,备份或装入本身的速度可能会稍微减慢,所以应在 DB2_BACKUP_USE_DIO 设置为 ON 时测量备份或装入性能的变化。
    注: 更改此注册表变量的值不会影响已在运行的备份或装入的行为。 对该值的更改将在下一次运行备份或装入时生效,并且不需要实例重新启动。
DB2BPVARS
  • 操作系统:对每个参数指定的操作系统
  • Default=Path
  • 两组参数可用于调整缓冲池。 一组参数 (仅在 Windows 上可用) 指定缓冲池应该对特定类型的容器使用散点读。 另一组参数(在所有平台上都可用)影响预取行为。
    重要信息: 不推荐使用此性能变量,在将来的发行版中可能会将其除去。 有关更多信息,请参阅 某些注册表变量和环境变量已更改
    以格式 parameter=value 在 ASCII 码文件中指定参数,每行一个参数。 例如,名为 bpvars.vars 的文件可能包含以下行:
         NO_NT_SCATTER = 1
    
    假定 bpvars.vars 存储在 F:\vars\ 中,要设置这些变量,请执行以下命令:
       db2set DB2BPVARS=F:\vars\bpvars.vars
    

    散射读参数

    对于针对相应类型的容器有大量顺序预取的系统以及您已将 DB2NTNOCACHE 设置为 ON 的系统,建议使用这些散射读参数。 这些参数 (仅在 Windows 平台上可用) 为 NT_SCATTER_DMSFILENT_SCATTER_DMSDEVICENT_SCATTER_SMS。 指定 NO_NT_SCATTER 参数以显式地禁止对任何容器进行散射读。 特定参数用于对所指示类型的所有容器打开散射读。 对于这些参数中的每个参数,缺省值为(或 OFF);且可能的值包括:(或 OFF)和 1(或 ON)。

    注: 如果 DB2NTNOCACHE 设置为 ON 以关闭 Windows 文件高速缓存,那么可以打开散点图只读。 如果 DB2NTNOCACHE 设置为 OFF 或者未设置,那么当您试图对任何容器打开散射读时,会向管理通知记录中写入一条警告消息,且仍然禁用散射读。
DB2CHKPTR
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 指定是否需要对输入进行指针检查。
DB2CHKSQLDA
  • 操作系统:所有操作系统
  • 缺省值:ON,值:ONOFF
  • 指定是否需要对输入进行 SQLDA 检查。
DB2_DEFER_MEMORY_COMMIT
  • 操作系统:Unix 和 Linux
  • 缺省值:OFF,值:OFFON
  • 当此变量为 ON时,将在后台异步执行缓冲池和锁定列表内存的初始化。 此异步初始化允许完成数据库激活,并使数据库可以更快地用于应用程序连接。 在初始化此内存时,在数据库激活之后的短时间内,数据库活动可能会对性能造成轻微影响。
  • 此变量不适用于 Windows 操作系统,因为现有行为已经与设置为 ON 时的行为相似。
  • 对此变量的更改需要重新启动数据库实例才会生效。
  • 此变量在 Db2 11.1 MP4 FP6 及更高版本中可用。
DB2_EVALUNCOMMITTED
  • 操作系统:所有操作系统
  • 缺省值:NO(当 DB2_WORKLOAD=SAP 时,缺省值为 YES),值:YESNO
  • 当启用此变量时,在可能的情况下,它将进行扫描以延迟或避免行锁定,直到知道数据满足谓词求值为止。 当启用此变量时,可对未落实的数据进行谓词求值。 只有对“当前已落实”(CC) 不适用的扫描才会考虑这些变量。

    只有在“当前已落实”语义对避免锁定争用没有帮助时,DB2_EVALUNCOMMITTED 才适用。 如果设置了此变量,并且“当前已落实”语义适用于扫描,那么将不会跳过已删除的行,并且不会对尚未落实的数据进行谓词求值;而是,将处理行和数据的当前已落实版本。

    并且,DB2_EVALUNCOMMITTED 只适用于使用“游标稳定性”或“读稳定性”隔离级别的语句。 此外,对于表扫描访问,将无条件跳过已删除的行,而不会跳过已删除的键 用于索引扫描 ,除非还设置了注册表变量 DB2_SKIPDELETED

    DB2_EVALUNCOMMITTED 注册表变量的激活在 db2start 命令上有效。 有关延迟锁定是否合适的决定则是在语句编译或绑定时作出的。

DB2_EXTEND_COL_UNIQUE_INDEX_ACCESS
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 此变量允许您控制在 按列组织的 表上创建唯一或主键约束时是否创建修改状态索引。 如果此注册表变量设置为 ON,那么创建强制主键或唯一约束时,将生成修改状态索引(如果该索引尚不存在)。 选择特定索引存取方案时,需要此修改状态索引。
DB2_EXTENDED_IO_FEATURES
  • 操作系统: AIX®
  • 缺省值:OFF,值:ONOFF
  • 将此变量设置为 ON 可启用增强 I/O 性能的功能。 此增强功能包括提高内存高速缓存的命中率,以及减少高优先级 I/O 的等待时间。 这些功能仅可用于特定的软硬件配置组合;对于其他配置来说,将此变量设置为 ON 将被 DB2 数据库管理系统或操作系统忽略。 最低配置要求为:
    • 数据库版本:DB2 V9.1
    • 必须使用原始设备作为数据库容器(文件系统上的容器不受支持)
    • 存储子系统: Shark DS8000® 支持所有增强的 I/O 性能功能。 请参阅 Shark DS8000 文档以获取设置和先决条件信息。

    HIGHMEDIUMLOW 的缺省 I/O 优先级设置分别为 3812; 您可以使用 DB2_IO_PRIORITY_SETTING 注册表变量来更改这些设置。

DB2_EXTENDED_OPTIMIZATION
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFFENHANCED_MULTIPLE_DISTINCTIXOROPT_SORTHEAP_EXCEPT_COL value
  • 此变量指定查询优化器是否使用优化扩充功能来帮助提高查询性能。 这些值指定不同优化扩展。 要指定多个值,请使用逗号分隔列表。

    缺省行为(由 OFFIXOR 值指定)用于优化器扩展索引 ORing 数据访问方法以包括引用任意索引列的 OR 谓词,即使出现非索引列谓词也是如此。 例如,考虑下面这两个索引定义:
       INDEX IX2:  dept    ASC
       INDEX IX3:  job     ASC
    如果设置 IXOR 选项,那么通过使用这两个索引,可以满足下列谓词:
       WHERE
            dept = :hv1 OR
            (job = :hv2 AND
            years >= :hv3)

    可使用 OPT_SORTHEAP_EXCEPT_COL value 选项来覆盖 sortheap 数据库配置参数的值。 覆盖值仅影响查询优化,不会确定运行时可用的实际内存量。 如果查询访问 按列组织的 表,那么将忽略此覆盖值以允许查询编译器使用 sortheap 数据库配置参数的当前值。

    OPT_SORTHEAP_EXCEPT_COL 的一种用法是用于影子表。 影子表便于 BLU Acceleration® 用于 OLTP 环境中的分析查询。 影子表是 按列组织的 表。 排序堆内存的需求高于 OLTP 环境中数据库的常规需求。 要增大排序堆内存而不影响 OLTP 查询的现有存取方案,请对 DB2_EXTENDED_OPTIMIZATION 添加 OPT_SORTHEAP_EXCEPT_COL 以覆盖 sortheap 数据库配置参数的值。

    DB2_EXTENDED_OPTIMIZATION 设置可能不会在所有环境中提高查询性能。 您应执行测试以确定各查询的性能提高情况。

    重要信息:
    • V 10.1 开始,不推荐使用 也许 ced_multiple_distinctIXOR 值,在将来的发行版中可能会将其除去。 移除 ENHANCED_MULTIPLE_DISTINCT 选项提供了可改进多个不同查询的性能的新增强功能。 IXOR 值是冗余值,因为它指定该缺省行为。 有关更多详细信息,请参阅 具有已更改行为的注册表变量
    • 仅当上次启动实例时启用了 ENHANCED_MULTIPLE_DISTINCT 值时,此值才会动态生效。
DB2_IO_PRIORITY_SETTING
  • 操作系统: AIX
  • 值:HIGH:#、MEDIUM:# 和 LOW:#,其中 # 可以是 115
  • 此变量与 DB2_EXTENDED_IO_FEATURES 注册表变量结合使用。 此注册表变量提供了一种方法来覆盖 Db2 数据库系统 (分别为 3812) 的缺省 HIGHMEDIUMLOW I/O 优先级设置。 必须在启动实例之前设置此注册表变量;对此变量进行任何修改都需要重新启动实例。 请注意,单独设置此注册表变量并不会启用增强的 I/O 功能,还必须设置 DB2_EXTENDED_IO_FEATURES 才能启用这些功能。 DB2_EXTENDED_IO_FEATURES 的所有系统要求同样适用于此注册表变量。
DB2_KEEP_AS_AND_DMS_CONTAINERS_OPEN
  • 操作系统:所有操作系统
  • 缺省值:NO,值:YESNO
  • 如果将此变量设置为 ON,那么每个 DMS 表空间容器都将打开一个文件句柄,直到数据库被取消激活为止。 因为免除了打开容器的开销,所以查询性能可能会提高。 仅应在纯 DMS 环境中使用此注册表,否则针对 SMS 表空间的查询的性能可能会受到负面影响。
DB2_KEEPTABLELOCK
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONTRANSACTIONOFFCONNECTION
  • 如果将此变量设置为 ONTRANSACTION,那么此变量允许 DB2 数据库系统在“未落实的读”或“游标稳定性”隔离级别处于关闭状态期间维护表锁定。 事务结束时将释放所保留的表锁定,就像为“读稳定性”和“可重复的读”扫描释放表锁定一样。

    如果将此变量设置为 CONNECTION,那么将为应用程序释放一个表锁定,直到该应用程序回滚事务或者连接被重置为止。 在落实之间,表锁定将继续挂起,删除表锁定的应用程序请求将被数据库忽略。 表锁定仍然被分配给该应用程序。 因此,当应用程序重新请求表锁定时,锁定已经处于可用状态。

    对于可利用此优化的应用程序工作负载,性能应该会有所提高。 然而,并行执行的其他应用程序的工作负载可能会受到影响。 其他应用程序可能无法访问给定表,从而使得并行性过低。 DB2 SQL 目录表不受此设置影响。 CONNECTION 设置还具有上面描述的 ONTRANSACTION 设置所具有的行为。

    在进行语句编译或绑定时将检查此注册表变量。

DB2_LARGE_PAGE_MEM
  • 操作系统: AIX, Linux和 Windows Server
  • 缺省值:NULL,值:使用 * 来表示应使用大页内存的所有适用内存区域,或应使用大页内存的特定内存区域的逗号分隔列表。 可用区域根据操作系统有所变化。
  • DB2 通常使用术语“大页”,而操作系统使用术语“大”和“巨大”来指代独立于硬件的特定和各种较大页大小。 操作系统“大”或“巨”页大小在各个操作系统/硬件平台上大小不同,这些术语可指代给定操作系统/硬件平台上的多个页大小。
  • 数据库设置适用于 DATABASE_MEMORY 区域并启用以下页面大小: AIX -大型 (16MB) 页面, Linux x64 -大型 (2MB) 页面和 Windows-大型 (2MB) pages.- DB:16GB 设置仅在 AIX 上可用,这将为 DATABASE_MEMORY 区域启用大型 (16GB) 页面。
  • PRIVATEDBMSFCMAPPL (APPL_MEMORY) 设置仅在 AIX 上可用,每个设置都为适用的内存区域启用大型 (16MB) 页面。
  • * 设置为以上指出的所有可用区域启用操作系统大/巨页内存。 在 AIX上,将针对数据库内存启用大型 (16MB) 页面,而不是大型 (16GB) 页面。

    当您正为数据库内存 (DB) 使用大页或巨页时,会限制数据库内存的动态减少,且会忽略 db_mem_thresh 设置。 自调整内存管理器 (STMM) 不会调整数据库区域的整体大小。 但是,STMM 会根据配置调整数据库内存区域内的区域。 有关更多信息,请参阅相关链接部分中的 database_memory 主题。

    使用大量虚拟内存的密集内存访问型应用程序可以通过使用大页或巨页来提高性能。 要使 DB2 数据库系统可以使用大页或巨页,必须先将操作系统配置为使用大页或巨页。

    要在 64 位 Db2 for AIX 上为代理程序专用内存启用大页面 ( DB2_LARGE_PAGE_MEM=PRIVATE 设置) ,必须在操作系统上配置大页面,并且实例所有者必须具有 CAP_BYPASS_RAC_VMM 和 CAP_PROPAGATE 功能。

    在 Linux 上,要验证内核巨页是否可用,请发出以下命令:

       cat ⁄proc/meminfo

    如果内核巨页可用,那么应该显示下面三行(服务器上配置的内存量不同,显示的数字也会不同):

    HugePages_Total:   200
    HugePages_Free:    200
    Hugepagesize:    16384 kB

    如果没有看到这几行,或者 HugePages_Total 为 0,那么必须配置操作系统或内核。

    在 Windows 上,系统上可用的大页面内存量小于可用内存总量。 系统运行一段时间之后,内存就会被分段,大页内存量就会减少。 应该将 DB2_ALLOCATION_SIZE 注册表变量设置为高值 (例如 256 MB) ,以便在 Windows 上实现一致的性能分配大内存页面。 (请注意,DB2_ALLOCATION_SIZE 需要您停止然后重新启动该实例。)

DB2_LOGGER_NON_BUFFERED_IO
  • 操作系统:所有操作系统
  • 缺省值:AUTOMATIC,值:AUTOMATICONOFF
  • 此变量允许您控制是否对日志文件系统执行直接 I/O (DIO) 操作。 如果 DB2_LOGGER_NON_BUFFERED_IO 设置为 AUTOMATIC,那么将通过 DIO 来打开活动日志窗口(即,主日志文件),并且将对所有其他记录器文件进行缓存。 如果它设置为 ON,那么将通过 DIO 来打开所有日志文件句柄。 如果它设置为 OFF,那么将对所有日志文件句柄进行缓存。
DB2MAXFSCRSEARCH
  • 操作系统:所有操作系统
  • 缺省值:5,值:-1 以及 133 554
  • 指定在将记录添加至表中时,要搜索的可用空间控制记录 (FSCR) 的数量。 缺省情况是搜索 5 个 FSCR。 修改此值允许您平衡插入速度与空间复用。 使用较大的值将优化空间复用。 使用较小的值将优化插入速度。 将值设置为 -1 会强制数据库管理器搜索所有 FSCR。
DB2_MAX_INACT_STMTS
  • 操作系统:所有操作系统
  • 缺省值:未设置,值:最大为 4000 000 000
  • 此变量覆盖对任何一个应用程序保留的不活动语句数的缺省限制。 可以选择另一个值,以便增大或减小用于不活动语句信息的系统监视器堆大小。 缺省限制为 250

    如果应用程序在一个工作单元中包含数目极多的语句,或者如果有许多并行执行的应用程序,那么可能会耗尽系统监视器堆。

DB2_MAX_NON_TABLE_LOCKS
  • 操作系统:所有操作系统
  • 缺省值:YES,值:请参阅描述
  • 此变量定义在事务释放所有 NON 表锁定之前该事务可具有的 NON 表锁定的最大数目。 NON 表锁定是这样一些表锁定:即使事务已使用完它们,它们仍保留在散列表和事务链中。 因为事务经常多次访问同一个表,所以保留锁定并将它们的状态更改为 NON 可以提高性能。
    为了获得最佳结果,此变量的建议值是想要任何连接访问的表的最大数目。 如果未指定用户定义的值,那么缺省值如下所示:如果 locklist 大小大于或等于
     SQLP_THRESHOLD_VAL_OF_LRG_LOCKLIST_SZ_FOR_MAX_NON_LOCKS 
    (当前为 8000),那么缺省值为
    SQLP_DEFAULT_MAX_NON_TABLE_LOCKS_LARGE
    (当前为 150)。 否则,缺省值为
    SQLP_DEFAULT_MAX_NON_TABLE_LOCKS_SMALL
    (当前为 0)。
DB2_MDC_ROLLOUT
  • 操作系统:所有操作系统
  • 缺省值:IMMEDIATE,值:IMMEDIATEOFFDEFER
  • 此变量启用性能增强,称为 rollout,用于从 MDC 表中执行删除操作。 当在搜索式 DELETE 语句中删除整个单元格(维值的交叉点)时,转出是删除 MDC 表中的行的较快方法。 好处是减少了记录工作而处理效率更高。
  • 变量设置有三种可能的结果:
    • 不转出 - 在指定了 OFF
    • 立即转出 - 在指定了 IMMEDIATE
    • 转出但延迟清除索引 - 在指定了 DEFER
  • 如果在启动后更改了值,那么对语句进行的任何新编译都将沿用新的注册表值设置。 对于程序包高速缓存中的语句,在重新编译语句之前,不会在删除处理中进行任何更改。 SET CURRENT MDC ROLLOUT MODE 语句将在应用程序连接级别覆盖 DB2_MDC_ROLLOUT 的值。
  • DB2 V9.7 及更高版本的发行版中,不支持将 DEFER 值用于具有分区 RID 索引的范围分区表。 仅支持 OFFIMMEDIATE 值。 如果 DB2_MDC_ROLLOUT 注册表变量设置为 DEFER,或者 CURRENT MDC ROLLOUT MODE 专用寄存器设置为 DEFERRED 以覆盖 DB2_MDC_ROLLOUT 设置,那么清除转出类型为 IMMEDIATE。

    如果表仅存在非分区 RID 索引,那么支持执行延迟索引清除转出。

  • 对此变量的更改将在所有将来已编译 SQL 语句执行后立即生效。 无需重新启动实例或发出带有 -immediate 参数的 db2set 命令。
DB2MEMDISCLAIM
  • 操作系统:全部
  • 缺省值:YES,值:YESNO
  • DB2 数据库系统进程使用的内存可能有一些关联的调页空间。 即使在已经释放关联的内存后,也会保留该调页空间。 是否会这样取决于操作系统的(可调)虚拟内存管理资源分配策略。 DB2MEMDISCLAIM 注册表变量控制 Db2 代理程序是否显式请求操作系统将保留的调页空间与释放的内存解除关联。

    DB2MEMDISCLAIM 设置为 YES 会导致较小的调页空间需求,并且可能减少来自调页的磁盘活动。 DB2MEMDISCLAIM 设置为 NO 将导致更大的调页空间需求,并且可能导致来自调页的更多磁盘活动。 在某些情况下,例如,如果调页空间很大,并且实内存很大从不会发生页面调度,那么设置为 NO 会提供较小的性能提高。

DB2_MEM_TUNING_RANGE
  • 操作系统:所有操作系统
  • Default =NULL, Values: a sequence of percentages n, m where n=minfree and m=maxfree and n < m
  • 如果未设置此变量,那么 DB2 数据库管理器会根据服务器上的内存量来计算 minfreemaxfree 的值。 在有限的 instance_memory 环境中, Db2 数据库管理器根据 instance_memory 设置计算 minfreemaxfree 的值。 除非启用了自调整内存管理器 (STMM) 并将 database_memory 设置为 AUTOMATIC,否则此变量的设置不起作用。

    minfreemaxfree 设置表示 STMM 尝试将其保留为缓冲区的实例内存量和/或系统内存量。 此缓冲区对于满足易失存储器需求很关键,同时避免系统上出现内存过载或耗尽实例内存。 此外,使用 minfree-maxfree 范围以跨多个数据库均衡内存需求。 在 STMM 调整的单个数据库中,目标空闲系统或实例内存始终为 minfree。 在多数据库环境中,带有最高内存需求的数据库的 STMM 调整器的目标为 minfree 值,带有较低需求的数据库的 STMM 调整器具有不同的较高可用内存目标(最高为 maxfree 值)。 缺省 minfreemaxfree 设置如下所示:
    表 1. 缺省 minfreemaxfree 设置
    实例或系统内存大小 minfree (%) maxfree(%)
    1 GB 7.8 33
    2 GB 7.4 29
    4 GB 7.0 25
    8 GB 6.7 22
    16 GB 6.4 19
    32 GB 6.2 17
    64 GB 6.0 15
    128 GB 5.8 13
    256 GB 5.7 12
    512 GB 5.6 11
    1 TB 5.5 10

    V 10.5开始,将添加 5% 额外缓冲区,此缓冲区包含在上表中的值中。 此额外的缓冲区用于适应更大范围环境中的易变内存需求,同时维护自动调整的 STMM 环境预期的弹性。 但是,此额外 5% 缓冲区可用于新激活的数据库来最小化针对激活的去谐(缩减)。 如果 版本 10.5 或更高版本的 STMM 调整程序检测到先前发行版中存在 STMM 调整程序 (与它们竞争系统内存) ,那么将从 版本 10.5 或更高版本上运行的数据库的计算中除去额外的 5% 缓冲区。 移除此额外 5% 缓冲区可避免使内存分配倾向于在先前发行版上运行的数据库(这将具有较少可用内存目标)。

    可以通过在 STMM 环境中减小 minfreemaxfree 设置来提高性能。 但是,必须注意确保易变内存需求不会导致页面调度或内存耗尽。

    对此变量的更改将在所有 STMM 调整操作后立即生效。 不需要重新启动实例或运行带有 -immediate 参数的 db2set 命令。

  • 对此变量的更改将在所有将来已编译 SQL 语句执行后立即生效。 无需重新启动实例或发出带有 -immediate 参数的 db2set 命令。
DB2_MMAP_READ
  • 操作系统: AIX
  • 缺省值:OFF,值:ONOFF
  • 此变量与 DB2_MMAP_WRITE 一起使用,以允许 DB2 数据库系统使用 mmap 作为 I/O 的替代方法。

    如果这些变量设为 ON,那么会使用内存映射 I/O 在 DB2 缓冲池中读取和写入数据,并且随后从文件系统高速缓存中除去此数据。 这会避免对 DB2 数据进行两次高速缓存。 但是,建议绕过文件系统高速缓存的方法是在表空间级别指定 NO FILE SYSTEM CACHING 子句,并将这些变量保留为缺省设置 OFF

DB2_MMAP_WRITE
  • 操作系统: AIX
  • 缺省值:OFF,值:ONOFF
  • 此变量与 DB2_MMAP_READ 一起使用,以允许 DB2 数据库系统使用 mmap 作为 I/O 的替代方法。

    如果这些变量设为 ON,那么会使用内存映射 I/O 在 DB2 缓冲池中读取和写入数据,并且随后从文件系统高速缓存中除去此数据。 这会避免对 DB2 数据进行两次高速缓存。 但是,建议绕过文件系统高速缓存的方法是在表空间级别指定 NO FILE SYSTEM CACHING 子句,并将这些变量保留为缺省设置 OFF

DB2_NO_FORK_CHECK
  • 操作系统:Unix
  • 缺省值:OFF,值:ONOFF
  • 当启用此注册表变量时,DB2 运行时客户机将使确定当前过程是否是派生调用的结果而进行的检查次数最少。 这可以提高不使用 fork() API 的 Db2 应用程序的性能。
DB2NTMEMSIZE
  • 操作系统:Windows
  • 缺省值:(随内存段变化)
  • Windows 要求在 DLL 初始化时保留所有共享内存段,以保证进程之间的地址匹配。 如果需要, DB2NTMEMSIZE 允许用户在 Windows 上覆盖 Db2 缺省值。 在大多数情况下,缺省值应足够使用。 内存段、缺省大小和替换选项为:
    1. 并行 FCM 缓冲区:缺省大小为 512 MB(在 32 位平台上)或 4.5 GB(在 64 位平台上);替换选项为 FCM:number_of_bytes
    2. 受防护方式的通信:缺省大小为 80 MB(在 32 位平台上)或 512 MB(在 64 位平台上);替换选项为 APLD:number_of_bytes
    3. 消息查询内存:在 32 位和 64 位平台上,缺省大小为 4 MB;覆盖选项是 QUE:<number of bytes>。
    可以通过用分号 (;) 分隔覆盖选项来覆盖多个段。 例如,在 32 位版本的 Db2上,要将 FCM 缓冲区限制为 1 GB ,并将受防护的存储过程限制为 256 MB ,请使用:
    db2set DB2NTMEMSIZE=FCM:1073741824;APLD:268435456
    
    要将消息队列内存增加到 64 MB,请使用:
    db2set DB2NTMEMSIZE=QUE:67108864
    
DB2NTNOCACHE
  • 操作系统:Windows
  • 缺省值:OFF,值:ONOFF
  • DB2NTNOCACHE 注册表变量指定 DB2 数据库系统是否使用 NOCACHE 选项打开数据库文件。 如果 DB2NTNOCACHE 设置为 ON,那么不需要文件系统高速缓存。 如果 DB2NTNOCACHE 设置为 OFF,那么操作系统会高速缓存 DB2 文件。 这适用于除包含长字段或 LOB 的文件以外的所有数据。 消除系统高速缓存使数据库有更多内存可用,这样可以增加缓冲池或排序堆。

    在 Windows 中,打开文件时会对其进行高速缓存,这是缺省行为。 为文件中的每 1 GB 从系统池保留 1 MB。 使用此注册表变量来覆盖高速缓存的无正式文件的 192 MB 限制。 当达到该高速缓存限制时,给出资源不够错误。

  • 对此变量的更改将在所有将来已编译 SQL 语句执行后立即生效。 无需重新启动实例或发出带有 -immediate 参数的 db2set 命令。
注: 对于表空间容器,将 NO FILE SYSTEM CACHING 子句与 ALTER TABLESPACE 或 CREATE TABLESPACE 语句配合使用会报告与将 DB2NTNOCACHE 设置为 ON相同的优点。
DB2NTPRICLASS
  • 操作系统:Windows
  • 缺省值:NULL,值:RH 和任何其他值
  • 设置 DB2 实例(程序 DB2SYSCS.EXE)的优先级类别。 有三种优先级类别:
    • NORMAL_PRIORITY_CLASS(缺省值优先级类别)
    • REALTIME_PRIORITY_CLASS(使用 R 来设置)
    • HIGH_PRIORITY_CLASS(使用 H 来设置)

    此变量与使用 DB2PRIORITIES 设置的各个线程优先级一起使用,以确定此系统中 DB2 线程相对于其他线程的绝对优先级。

    注: 不推荐使用 DB2NTPRICLASS ,仅应在服务建议时使用。 使用 DB2 服务类来调整代理程序优先级和预取优先级。 使用此变量时应当小心。 误用可能会对整个系统的性能有负面影响。

    有关更多信息,请参阅 Win32 文档中的 SetPriorityClass() API。

DB2NTWORKSET
  • 操作系统:Windows
  • 缺省值:1,1
  • 用于修改 DB2 数据库管理器可用的最小和最大工作集大小。 缺省情况下,当 Windows 未处于页面调度状态时,进程的工作集可根据需要增大。 但是,当发生页面调度时,进程可拥有的最大工作集大约是 1 MB。 DB2NTWORKSET 允许您重设此缺省行为。

    使用语法 DB2NTWORKSET=min, max指定 DB2NTWORKSET ,其中 minmax 以兆字节表示。

DB2_OVERRIDE_BPF
  • 操作系统:所有操作系统
  • Default=Not set, Values: a positive numeric number of pages OR <entry>[;<entry>] where <entry> =<buffer pool ID>,<number of pages>
  • 此变量以页为单位指定在激活数据库、前滚恢复或崩溃恢复时要创建的缓冲池大小。 当内存约束导致在激活数据库、前滚恢复或崩溃恢复期间出现故障时,此选项很有用。 出现内存不足可能是因为实内存短缺(这种情况很少发生);或者因为数据库管理器试图在没有精确配置的缓冲池的情况下分配大的缓冲池。 例如,当数据库管理器连 16 页的最小缓冲池都无法启动时,请尝试使用此环境变量来指定一个更小的页数。 为此变量提供的值将覆盖当前的缓冲池大小。

    您还可以使用 <entry>[;<entry>...] where <entry> =<buffer pool ID>,<number of pages> 临时更改所有缓冲池的大小或缓冲池的子集,以便它们可以启动。

DB2_PINNED_BP
  • 操作系统: AIX, HP-UX和 Linux
  • 缺省值:NO,值:YESNO
  • 将此变量设置为 YES 将致使 DB2 请求操作系统锁定 DB2 的数据库共享内存。 将 DB2 配置为锁定数据库共享内存之后,应注意确保系统不会被过度使用,这是因为操作系统在管理内存方面的灵活程度将下降。

    在 Linux上,除了修改此注册表变量外,还需要库 libcap.so.1

    如果将此变量设置为 YES,那么将无法启用数据库共享内存自调整功能(通过将 database_memory 配置参数设置为 AUTOMATIC 来激活此功能)。

    对于 64 位环境中的 HP-UX,除了修改此注册表变量外,还必须对 DB2 实例组授予 MLOCK 特权。 为此,具有 root 用户访问权限的用户要执行以下操作:

    1. DB2 实例添加至 /etc/privgroup 文件中。 例如,如果 DB2 实例组属于 db2iadm1 组,那么必须将下面这一行添加到 /etc/privgroup 文件中:
      db2iadm1 MLOCK
    2. 发出以下命令:
         setprivgrp -f /etc/privgroup
DB2PRIORITIES
  • 操作系统:所有操作系统
  • 值的设置是与平台相关
  • 控制 DB2 进程和线程的优先级。
注: 不推荐使用 DB2PRIORITIES ,仅应在服务建议时使用。 使用 DB2 服务类来调整代理程序优先级和预取优先级。
DB2_RCT_FEATURES
  • 操作系统:所有操作系统
  • 缺省值:NULL。 值:GROUPUPDATE=[ON|OFF]GROUPUPDATE 的缺省值为 OFF。
  • 当仅在前导“键序列”列及其子集上指定了等于谓词时,此变量允许对搜索式 UPDATE 语句(它以范围集群表中的多行作为目标)进行经过优化和简化的更新处理。 由于对于页面上的所有行只更新单个日志记录,而不是对于每一行都要更新日志记录,因此也简化了日志记录。
    用法:
    db2set DB2_RCT_FEATURES=GROUPUPDATE=ON
DB2_REDUCE_FLUSHING_DURING_BACKUP
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ON | OFF
  • 在联机备份操作开始时,缓冲池中已更改的页面必须持久存储到表空间存储器,在使用超大型缓冲池的配置中,这会增加备份操作的持续时间。 此变量指定联机备份是否对缓冲池中已更改的页面执行简化清仓。 执行简化清仓时,复原联机备份后所需的前滚操作持续时间可能会增加。
  • 此变量在 V11.1.4.4 及更高发行版中可用。
  • 对此变量的更改不需要重新启动数据库实例。
  • 对此变量的更改不会影响更改变量时已在运行中的联机备份操作。
DB2_RESOURCE_POLICY
  • 操作系统: AIX, Linux和 Windows
  • 缺省值: 未设置,值: 配置文件 (AIX, Linux, Windows) 或 AUTOMATIC (AIX, Linux, Windows) 的有效路径
  • 定义可用于控制 Db2 数据库使用的操作系统资源的资源策略,或者包含用于将特定操作系统资源分配给特定 Db2 数据库对象的规则。 资源控制的范围根据操作系统的不同而变化。

    在具有 POWER7® 或更高版本处理器的 AIX 系统上,或者任何 Linux 或 Windows 系统上,可以将此变量设置为 AUTOMATIC。 指定 AUTOMATIC 选项时, Db2 数据库系统会自动确定硬件拓扑,并为硬件拓扑中可见的每组相关资源 (处理器和内存) 创建资源组。 根据硬件拓扑,可能有一个或多个资源组,每个资源组包含一个或多个资源。

    AUTOMATIC 设置启用处理器亲缘关系,由此 Db2 数据库系统将引擎可分派单元 (EDU) 分配给特定资源组和资源。 此外,AUTOMATIC 设置还确定是否启用内存亲缘关系,EDU 根据此亲缘关系尝试在处理期间分配本地内存,从而改善内存亲缘关系。 以循环方式对资源分配 EDU,并且假定每个资源等价。 在使用 POWER7 和更高版本处理器的系统上,当资源分布有偏差和/或可能发生更改 (例如,在具有多个 LPAR 的系统中) 时,建议不要使用 AUTOMATIC 设置。 在运行 AIX的 POWER ® 系统上,可以使用 lssrad -av 命令来确定资源分配。 在运行 Linux的 POWER 系统上,可以使用 numactl -H 命令来确定资源分配。

    此设置适用于将公开硬件拓扑中的多个资源组和/或资源的系统,并且可以提高某些工作负载的查询性能。 要验证是否有任何性能提高,建议在将 DB2_RESOURCE_POLICY 变量设置为 AUTOMATIC 之前和之后都对工作负载运行性能分析。

    您还可以设置注册表变量以指示配置文件的路径,该配置文件定义用于将 Db2 EDU 绑定到特定资源组和资源的策略。 这在使用 AUTOMATIC 设置无法获得所需要的配置的情况下很有用。

    注: 仅对于 AIX ,使用 DB2_RESOURCE_POLICY=AUTOMATIC 或使用使用 RSET 或 SRAD 方法的配置文件,需要实例帐户具有 CAP_NUMA_ATTACH 和 CAP_PROPAGATE 功能。 有关更多信息,请参阅 chuser 命令的 AIX 文档。
    注: 仅对于 AIX ,当启用 PowerVM® Dynamic Platform Optimizer 时,不支持使用 SRAD 资源类型。

    样本配置文件:

    示例 1: 将所有 Db2 进程绑定到 CPU 1 或 3。

    <RESOURCE_POLICY>  	
    		<GLOBAL_RESOURCE_POLICY>  
    			<METHOD>CPU</METHOD> 
    			<RESOURCE_BINDING> 
      		<RESOURCE>1</RESOURCE>	
    			</RESOURCE_BINDING>
    			<RESOURCE_BINDING>
    				<RESOURCE>3</RESOURCE>
    			</RESOURCE_BINDING>
    		</GLOBAL_RESOURCE_POLICY>
    	</RESOURCE_POLICY> 

    示例 2: (仅限AIX ) 将 Db2 进程绑定到下列其中一个资源集: sys/node.03.00000, sys/node.03.00001, sys/node.03.00002, sys/node.03.00003

    <RESOURCE_POLICY>
    		<GLOBAL_RESOURCE_POLICY> 
    			<METHOD>RSET</METHOD> 
    			<RESOURCE_BINDING> 
    				<RESOURCE>sys/node.03.00000</RESOURCE> 
    			</RESOURCE_BINDING> 
    			<RESOURCE_BINDING> 
    				<RESOURCE>sys/node.03.00001</RESOURCE> 
    			</RESOURCE_BINDING> 
    			<RESOURCE_BINDING> 
    				<RESOURCE>sys/node.03.00002</RESOURCE> 
    			</RESOURCE_BINDING> 
    			<RESOURCE_BINDING> 
    				<RESOURCE>sys/node.03.00003</RESOURCE> 
    			</RESOURCE_BINDING> 
    		</GLOBAL_RESOURCE_POLICY> 
    	</RESOURCE_POLICY> 

    示例 3: (仅限Linux ) 将与 SAMPLE 数据库关联的缓冲池标识 2 和 3 中的所有内存绑定到 NUMA 节点 3。 还将 80% 的总数据库内存用于绑定到 NUMA 节点 3,并将 20% 保留为在非缓冲池特定内存的所有节点间进行条带分割。

    <RESOURCE_POLICY>
    		<DATABASE_RESOURCE_POLICY>
    			<DBNAME>sample</DBNAME>
    			<METHOD>NODEMASK</METHOD>
    			<RESOURCE_BINDING>
    				<RESOURCE>3</RESOURCE>
    				<DBMEM_PERCENTAGE>80</DBMEM_PERCENTAGE>
    				<BUFFERPOOL_BINDING>
    					<BUFFERPOOL_ID>2</BUFFERPOOL_ID>
    					<BUFFERPOOL_ID>3</BUFFERPOOL_ID>
     			</BUFFERPOOL_BINDING>
    			</RESOURCE_BINDING>
    		</DATABASE_RESOURCE_POLICY>
    	</RESOURCE_POLICY>
    

    示例 4: (仅适用于 Linux 和 Windows) 定义由 CPU 掩码 0x0F 和 0xF0指定的两个不同的处理器集。 将 DB2 进程和缓冲池标识 2 与处理器集 0x0F 绑定,并将 DB2 进程和缓冲池标识 3 与处理器集 0xF0 绑定。 对于每个处理器集,将数据库内存总量的 50% 用于绑定。

    当期望建立处理器与 NUMA 节点之间的映射时,此资源策略很有用。 这种场景的示例是具有 8 个处理器的系统和 2 个 NUMA 节点的系统,其中处理器 0 到 3 属于 NUMA 节点 0,处理器 4 到 7 属于 NUMA 节点 1。 此资源策略允许在隐式维护内存位置时进行处理器绑定(即混合使用 CPU 方法和 NODEMASK 方法)。

    
     <RESOURCE_POLICY>
       <DATABASE_RESOURCE_POLICY>
         <DBNAME>sample</DBNAME>
         <METHOD>CPUMASK</METHOD>
         <RESOURCE_BINDING>
           <RESOURCE>0x0F</RESOURCE>
           <DBMEM_PERCENTAGE>50</DBMEM_PERCENTAGE>
           <BUFFERPOOL_BINDING>
             <BUFFERPOOL_ID>2</BUFFERPOOL_ID>
           </BUFFERPOOL_BINDING>
         </RESOURCE_BINDING>
         <RESOURCE_BINDING>
           <RESOURCE>0xF0</RESOURCE>
           <DBMEM_PERCENTAGE>50</DBMEM_PERCENTAGE>
           <BUFFERPOOL_BINDING>
             <BUFFERPOOL_ID>3</BUFFERPOOL_ID>
           </BUFFERPOOL_BINDING>
         </RESOURCE_BINDING>
       </DATABASE_RESOURCE_POLICY>
     </RESOURCE_POLICY>

    示例 5: (仅限AIX 操作系统) 您可以通过在资源策略文件中指定资源组来手动启用资源组感知。 使用 RESOURCE_GROUP 元素以指定属于特定资源组的资源。 定义的资源组不需要符合 NUMA 边界。 ENV_GET_DB2_EDU_SYSTEM_RESOURCES 表函数的 RESOURCE_GROUP 列标识与 EDU 关联的资源组。

    定义两个资源组,每个资源组包含四个调度程序资源亲缘关系域 (SRAD):
    <RESOURCE_POLICY>
      <GLOBAL_RESOURCE_POLICY>
    
        <METHOD>SRAD</METHOD>
    
        <RESOURCE_GROUP>
          <RESOURCE_GROUP_NAME>TESTGROUP1</RESOURCE_GROUP_NAME>
    
          <RESOURCE_BINDING>
            <RESOURCE>0</RESOURCE>
          </RESOURCE_BINDING>
    
          <RESOURCE_BINDING>
            <RESOURCE>1</RESOURCE>
          </RESOURCE_BINDING>
    
          <RESOURCE_BINDING>
            <RESOURCE>2</RESOURCE>
          </RESOURCE_BINDING>
    
          <RESOURCE_BINDING>
            <RESOURCE>3</RESOURCE>
          </RESOURCE_BINDING>
    
        </RESOURCE_GROUP>
    
        <RESOURCE_GROUP>
          <RESOURCE_GROUP_NAME>TESTGROUP2</RESOURCE_GROUP_NAME>
    
          <RESOURCE_BINDING>
            <RESOURCE>4</RESOURCE>
          </RESOURCE_BINDING>
    
          <RESOURCE_BINDING>
            <RESOURCE>5</RESOURCE>
          </RESOURCE_BINDING>
    
          <RESOURCE_BINDING>
            <RESOURCE>6</RESOURCE>
          </RESOURCE_BINDING>
    
          <RESOURCE_BINDING>
            <RESOURCE>7</RESOURCE>
          </RESOURCE_BINDING>
    
        </RESOURCE_GROUP>
    
      </GLOBAL_RESOURCE_POLICY>
    </RESOURCE_POLICY>
    DB2_RESOURCE_POLICY 注册表变量指定的配置文件接受 SCHEDULING_POLICY 元素。 在某些平台上,可以使用 SCHEDULING_POLICY 元素来选择
    • DB2 服务器使用的操作系统调度策略

      您可以使用 DB2NTPRICLASS 注册表变量为 Db2 (在 AIX上) 和 Db2 (在 Windows 上) 设置操作系统调度策略。

    • 各个 DB2 服务器代理程序使用的操作系统优先级

    此外,可以使用注册表变量 DB2PRIORITIESDB2NTPRICLASS 来控制操作系统调度策略和设置 DB2 代理程序优先级。 但是,如果在资源策略配置文件中指定 SCHEDULING_POLICY 元素,就可以在单一位置指定调度策略和相关代理程序优先级。

    示例 1: 选择具有 Db2 日志写程序和阅读器进程优先级提升的 AIX SCHED_FIFO2 调度策略。

    	<RESOURCE_POLICY> 
    		<SCHEDULING_POLICY>
    			<POLICY_TYPE>SCHED_FIFO2</POLICY_TYPE>
    			<PRIORITY_VALUE>60</PRIORITY_VALUE>
    
    			<EDU_PRIORITY>
    				<EDU_NAME>db2loggr</EDU_NAME>
    				<PRIORITY_VALUE>56</PRIORITY_VALUE>
    			</EDU_PRIORITY>
    
    			<EDU_PRIORITY>
    				<EDU_NAME>db2loggw</EDU_NAME>
    				<PRIORITY_VALUE>56</PRIORITY_VALUE>
    			</EDU_PRIORITY>
    		</SCHEDULING_POLICY>
    	</RESOURCE_POLICY>

    示例 2: 在 Windows 上替换 DB2NTPRICLASS=H 。

    	<RESOURCE_POLICY> 
    		<SCHEDULING_POLICY>
    			<POLICY_TYPE>HIGH_PRIORITY_CLASS</POLICY_TYPE>
    		</SCHEDULING_POLICY>
    	</RESOURCE_POLICY>
DB2_SELUDI_COMM_BUFFER
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 此变量在通过 UPDATE、INSERT 或 DELETE(UDI)查询中的 SELECT 来处理分块游标时使用。 当启用此注册表变量时,它会阻止将查询结果存储在临时表中。 但是,在对 UDI 查询的 SELECT 的分块游标执行 OPEN 处理期间,DB2 数据库系统会尝试将查询的整个结果直接缓存到通信缓冲区内存区域中。
    注: 如果通信缓冲区空间不足以容纳整个查询结果,那么将发出 SQLCODE -906 错误并回滚事务。 有关分别调整本地和远程应用程序的通信缓冲区内存区域大小的信息,请参阅 aslheapszrqrioblk 数据库管理器配置参数。

    在启用了分区内并行性时,不支持此注册表变量。

    如果使用 -immediate 参数发出 db2set 命令,那么对此变量的更改可以对所有将来编译的 SQL 语句立即生效。 不需要重新启动实例。

DB2_SET_MAX_CONTAINER_SIZE
  • 操作系统:所有操作系统
  • 缺省值:未设置,值:-1 或大于 65 536 字节的任何正整数
  • 此注册表变量允许您限制启用了 AutoResize 功能的自动存储器表空间的各个容器大小。
    注: 虽然您可以指定 DB2_SET_MAX_CONTAINER_SIZE (以字节,千字节或兆字节为单位) ,但 db2set 指示其值 (以字节为单位)。
  • 如果该值设置为 -1,那么对容器大小没有限制。
DB2_SKIPDELETED
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 当启用了此注册表变量时,它允许使用“游标稳定性”或“读稳定性”隔离级别的语句(在索引访问期间)无条件地跳过已删除的键和(在表访问期间)跳过已删除的行。 启用 DB2_EVALUNCOMMITTED 后,将自动跳过已删除的行,但除非还启用了 DB2_SKIPDELETED ,否则不会跳过未落实的伪删除键 在索引中 。 只有对“当前已落实”(CC) 不适用的扫描才会考虑这些变量。

    只有在“当前已落实”语义对避免锁定争用没有帮助时,DB2_SKIPDELETED 才适用。 如果设置了此变量,并且“当前已落实”语义适用于扫描,那么将不会跳过已删除的行;而是,将处理它们的当前已落实版本。

    此注册表变量不会影响 DB2 目录表上的游标的行为。

    此注册表变量用 db2start 命令激活。

DB2_SKIPINSERTED
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 当启用了 DB2_SKIPINSERTED 注册表变量时,它允许使用“游标稳定性”或“读稳定性”隔离级别的语句跳过未落实的已插入行,就好像从未插入这些行一样。 此注册表变量不会影响 DB2 目录表上的游标的行为。 此注册表变量是在数据库启动时激活的,而跳过未落实的已插入行的决定是在语句编译时或构建时做出的。

    如果正在使用“当前已落实”语义,那么此注册表变量没有任何作用。 也就是说,即使将 DB2_SKIPINSERTED 设置为 OFF 并启用“当前已落实”行为,也仍然会跳过未落实的已插入行。

    注: 跳过插入行为与具有暂挂转出清除的表不兼容。 因此,扫描程序可能等待 RID 上的锁定,这样做只是为了发现该 RID 是否是已转出块的一部分。
DB2_SMP_INDEX_CREATE
  • 操作系统:所有操作系统
  • 缺省值:未设置,值:21000
  • 此动态注册表变量会覆盖构建和重新构建索引时用于扫描和排序索引数据的代理程序数量的缺省值。 仅会在索引管理器组件确定已许可并行性时检查此注册表变量。 该决策基于多个注意事项,包括表大小和是否存在多个处理器。

    DB2_SMP_INDEX_CREATE 仅在设置为非零值时生效。 当增加用于对索引数据进行扫描和排序的代理程序数量时,切记确保已正确设置数据库配置参数 sortheapsheapthres_shr。 可用于排序的内存量(由 sheapthres_shr 参数指定)越多,对索引数据进行排序时需要将临时结果写至系统临时表空间的可能性越小。 如果排序未溢出至磁盘,那么速度将会更快。 此外,要确保排序中每个参与的代理程序获得相同的内存了,应该将 sortheap 参数设置为不大于 sheapthres_shr/n 的值,其中 n 是用于对索引表进行扫描和排序的代理程序数量。

DB2_SMS_TRUNC_TMPTABLE_THRESH
  • 操作系统:所有操作系统
  • 缺省值:-2,值:-2-10n,其中 n 为 SMS 表空间容器中针对每个临时表要维护的扩展数据块的数目
  • 此变量指定表示将在 SMS 表空间中维护的临时表的文件的最小文件大小阈值。

    此变量的缺省设置为 -2,这意味着对于其大小小于或等于 1 个扩展数据块 * 容器数的任何溢出的 SMS 临时对象,将没有任何不需要的文件系统访问。 超过此大小的临时对象会被截断为 0 个扩展数据块。

    如果此变量设置为 0,那么不执行任何特殊阈值处理。 但是,一旦不再需要临时表,该文件就会被截断为 0 个扩展数据块。 当此变量的值大于 0 时,将维护更大的文件。 超过此阈值的对象将被截断为阈值大小。 这样可减少每次使用临时表时删除并重新创建文件所造成的一部分系统开销。

    如果此变量设置为 -1,那么不会截断该文件,并且允许它无限增长,只不过会受到系统资源的限制。

DB2_SORT_AFTER_TQ
  • 操作系统:所有操作系统
  • 缺省值:NO,值:YESNO
  • 指定当接收端要求对数据排序并且接收节点数与发送节点数相等时,优化器如何在分区数据库环境中使用定向表队列。

    DB2_SORT_AFTER_TQ=NO 时,优化器往往会在发送端排序,而在接收端合并行。

    DB2_SORT_AFTER_TQ=YES,优化器往往会发送未排序的行,在接收端不合并,而在接收完所有的行之后才在接收端对这些行进行排序。

    如果使用 -immediate 参数发出 db2set 命令,那么对此变量的更改可以对所有将来编译的 SQL 语句立即生效。 不需要重新启动实例。

DB2_SQLWORKSPACE_CACHE
  • 操作系统:所有操作系统
  • 缺省值:30,值:10 到 2000
  • 此变量允许您控制在 SQL 工作空间中对先前使用的段进行高速缓存的数量。

    SQL 工作空间包含执行 SQL 时的分配(以段的形式)。 正在为应用程序执行的每个 SQL 语句(静态或动态)都必须在 SQL 工作空间中保留该语句的执行期间所使用的段的唯一副本。 在完成该语句的执行后,该段将成为不活动段,并且可以释放与不活动段相关联的内存分配,也可以继续在 SQL 工作空间中高速缓存这些内存分配。 当从任何连接再次执行相同 SQL 语句时,将在 SQL 工作空间中查找上次执行该语句时保留的段的高速缓存副本,从而节省与分配和初始化该段的新副本相关联的成本。 因此,SQL 工作空间将同时包含活动段(对应于当前执行的 SQL)和当前未在执行的高速缓存的段。

    此注册表变量的值指定允许在 SQL 工作空间中高速缓存的内存分配的百分比。 此高速缓存将表示为活动段的内存分配的百分比。 例如,值 50 表示 SQL 工作空间包含所有活动段(当前在执行的段)以及最多 50% 的先前执行了高速缓存的段(可以复用这些段)。 应该根据您希望 SQL 工作空间中可供复用的多少来调整 DB2_SQLWORKSPACE_CACHE 的设置。 例如,增加此变量的大小可以在一定程度上提高 OLTP 工作负载的性能。 在另一方面,较高的设置也意味着将增加应用程序共享堆的大小。
    注: 如果 appl_memory 数据库配置参数未设置为 AUTOMATIC,那么 SQL 工作空间的大小也可能受 appl_memory 限制,并且 SQL 工作空间可能未提供 DB2_SQLWORKSPACE_CACHE 设置所允许的高速缓存量; 在这种情况下,您可能需要考虑增大 appl_memory (或将其设置为 AUTOMATIC)。
    此注册表变量不是动态的
DB2_TRUST_MDC_BLOCK_FULL_HINT
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ONOFF
  • 当将 MDC 表成插入记录时,DB2 会搜索组合块索引以查找与插入的新纪录具有相同维度值的块。 将会检查这些块以确定其是否具有足够容纳新纪录的可用空间。 对于经检查不具有足够可用空间的所有块,DB2 会在组合块索引中对该块设置 Full_Block 位。 如果指定维度值的块列表相当长,并且其中大部分块都已满,那么搜索时可能会花费大量时间。

    当设置了 DB2_TRUST_MDC_BLOCK_FULL_HINT 变量时,DB2 会跳过对在组合块索引中标记了 Full_Block 位的块搜索可用空间。 此 Full_Block 位仅作为提示,该位仅在整个块全部移除,或使用 REORG 命令重新构建组合块索引时才会清除。 折衷就是如果运行的删除使用 rollout 删除部分清空块,而不是完全清空块,那么可能会浪费一些可用空间。 更多有关 rollout 删除的信息,请参阅“MDC 表优化策略”中的“Rollout 删除”主题。

DB2_TRUSTED_BINDIN
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:OFFON 或者 CHECK
  • 启用 DB2_TRUSTED_BINDIN 后,会加速执行不受防护的嵌入式存储过程中包含主变量的查询语句。

    当启用了此变量时,在绑定不受防护的嵌入式存储过程中包含的 SQL 和 XQuery 语句期间,不会将外部 SQLDA 格式转换为内部 DB2 格式。 这将加速处理嵌入式 SQL 和 XQuery 语句。

    当启用了此变量时,不受防护的嵌入式存储过程中不支持下列数据类型:

    • SQL_TYP_DATE
    • SQL_TYP_TIME
    • SQL_TYP_STAMP
    • SQL_TYP_CGSTR
    • SQL_TYP_BLOB
    • SQL_TYP_CLOB
    • SQL_TYP_DBCLOB
    • SQL_TYP_CSTR
    • SQL_TYP_LSTR
    • SQL_TYP_BLOB_LOCATOR
    • SQL_TYP_CLOB_LOCATOR
    • SQL_TYP_DCLOB_LOCATOR
    • SQL_TYP_BLOB_FILE
    • SQL_TYP_CLOB_FILE
    • SQL_TYP_DCLOB_FILE
    • SQL_TYP_BLOB_FILE_OBSOLETE
    • SQL_TYP_CLOB_FILE_OBSOLETE
    • SQL_TYP_DCLOB_FILE_OBSOLETE

    如果遇到了这些数据类型,那么会返回 SQLCODE -804 和 SQLSTATE 07002。

    注: 输入主变量的数据类型和长度必须与相应元素的内部数据类型和长度完全匹配。 对于主变量,将始终满足此要求。 但是,对于参数标记,必须注意确保使用相匹配的数据类型。 可以使用 CHECK 选项来确保所有输入主变量的数据类型和长度都匹配,但是此选项将不利于性能提高。
    注: 不推荐使用 DB2_TRUSTED_BINDIN ,将在以后的发行版中除去。
DB2_USE_ALTERNATE_PAGE_CLEANING
  • 操作系统:所有操作系统
  • 缺省值:未设置,值:ONOFF
  • 此变量指定 DB2 数据库使用页清除算法的另一种方法还是使用页清除的缺省方法。 当此变量设置为 ON 时,DB2 系统会将更改的页写入磁盘,从而保持在 LSN_GAP 前面并且主动查找牺牲页。 这样做允许页清除程序更好地利用可用的磁盘 I/O 带宽。 当此变量设置为 ON 时,由于 chngpgs_thresh 数据库配置参数不控制页清除程序的活动,所以它不再有意义。
DB2_USE_ASYNC_FOR_MIRRORLOG
  • 操作系统:Unix
  • 缺省值:OFF,值:ON | OFF
  • 激活此变量可以提高使用镜像日志路径配置的数据库的日志写入性能。 通过将日志数据异步写入镜像路径来实现性能改进,从而使活动日志写入和镜像日志写入并行进行。
  • 此变量在 V11.1.4.4 及更高发行版中可用。
  • 对此变量的更改要求取消激活并重新激活数据库。
  • Db2 不允许在 Windows 中启用此环境变量。
  • 建议不要在 Solaris 环境中启用此变量,因为可能会发现镜像日志性能下降。
要点: 在 AIX 系统上启用 DB2_USE_ASYNC_FOR_MIRRORLOG 变量时,请确保还启用了 I/O 完成端口 (IOCP) 。 IOCP 定义 AIX 异步 IO 的提交方式以及 AIX 在异步 IO 完成时如何通知用户。 因为镜像日志变量定义了镜像日志记录是否使用异步 IO 或同步 IO,所以镜像日志记录的性能受到影响。

在 Db2 11.1.4.4 和更高版本中,同时启用镜像日志记录和 IOCP。 但是,在禁用 IOCP 时,使用异步 IO 会降低性能,这会影响镜像日志记录,因为它依赖于 IOCP。

DB2_USE_BUFFERED_READ_FOR_ACTIVE_LOG
  • 操作系统:所有操作系统
  • 缺省值:NO,值:YESNO
  • 此变量指定在读取事务日志文件数据时,是否允许通过自助使用缓冲式 I/O 显著改善大型工作单元的回滚处理性能。
  • 此变量在 V11.1.4.4 及更高发行版中可用。
  • 对此变量的更改不需要重新启动数据库实例。
DB2_USE_FAST_PREALLOCATION
  • 操作系统: AIX 和 Linux on Veritas VxFS, JFS2, GPFS , ext4 (仅限Linux ) 和 xFS (仅限Linux ) 文件系统
  • 缺省值: ON for Veritas VxFS, JFS2, GPFS , ext4 和 xFS,值: ONOFF
  • 允许快速预分配文件系统功能部件保留表空间,并可以提高创建或改变大型表空间的过程以及数据库恢复操作的速度。 实现此速度改善所增加的成本较低,也就是增加了在运行时期间插入行时分配实际空间所产生的成本。

    要禁用快速预分配,请将 DB2_USE_FAST_PREALLOCATION 设置为 OFF。 在某些操作系统 (尤其是 AIX) 上,如果在同一表空间上执行大量插入和选择操作,那么这可能会提高运行时性能,从而降低创建表空间和数据库复原时间的速度。 请注意,禁用快速预分配后,必须重新启动数据库。

DB2_USE_FAST_LOG_PREALLOCATION
  • 操作系统: AIX 和 Linux on Veritas VxFS, JFS2, GPFS , ext4 (仅限Linux ) 和 xFS (仅限Linux ) 文件系统
  • 缺省值:OFFON(在 DB2_WORKLOAD=SAP 下),值:ONOFF
  • 允许快速预分配文件系统功能部件为日志文件保留空间,并可以提高创建或变更大型日志文件的过程的速度(如果底层文件系统支持此功能)。 提高此速度所增加的成本较低,此成本就是在运行时期间将日志记录写入这样的预分配日志文件时,需要执行实际的空间分配。

    要对日志启用快速预分配,请将 DB2_USE_FAST_LOG_PREALLOCATION 设置为 ON。

DB2_USE_IOCP
  • 操作系统: AIX
  • 缺省值:ON,值:ON 或 OFF
  • 此变量允许在提交和收集异步 I/O (AIO) 请求时使用 AIX I/O 完成端口 (IOCP)。 此功能用来提高非一致性内存访问 (NUMA) 环境中的性能,这是因为它可以避免进行远程内存访问。
DB2_4K_DEVICE_SUPPORT
  • 操作系统:所有操作系统
  • 缺省值:OFF,值:ON 或 OFF
  • 将此变量设置为 ON 即可支持使用 4K 扇区大小的存储设备。 此设置会调整数据结构的内存布局以及磁盘 I/O 操作的参数,以便与此类存储器的需求兼容。 在配置有使用 512 字节扇区大小的存储设备的环境中启用此设置后,性能可能会下降。
  • 此变量从 V11.1.4.4 开始以技术预览形式提供,在生产环境中尚不受支持,直到另有声明为止。
  • 更改此变量需要重新启动数据库实例。
  • 目前,启用 4 KB 扇区支持后,下列限制与局限性适用:
    • 不支持使用配置为进行直接磁盘(原始)访问的数据库管理 (DMS) 表空间。
    • 不支持使用使用 NO FILESYSTEM CACHING 配置的系统管理 (SMS) 表空间。
    • 根据工作负载特征,访问大对象 (LOB) 数据的性能可能会下降。
    • 复原在启用 4 KB 扇区支持之前创建的备份映像,或处理在启用之前创建的装入副本文件时,性能可能会下降。
    • 备份映像和装入副本文件会稍微增大。
    • pureScale® 实例不支持此功能部件。