CF 内存参数配置

Db2® pureScale ® 实例中,多个配置参数和注册表变量协同工作以控制 集群高速缓存工具(也称为 CF) 的内存分配。

参数

Db2 V10.5 修订包 5 和更高版本的修订包中,当专门启用时,可以自调整 CF 内存。

这些配置参数和注册表变量会影响 CF 内存分配和管理。 这些参数和变量仅在成员启动或重新启动后生效,除非在描述中注明。
  • cf_mem_sz: 控制 CF所使用的总内存。 缺省设置为 AUTOMATIC
  • cf_db_mem_sz: 控制 CF 用于此特定数据库的总内存限制。 缺省设置为 AUTOMATIC
  • cf_gbp_sz: 确定 CF 用于此特定数据库的组缓冲池使用情况的内存。 缺省设置为 AUTOMATIC
  • cf_lock_sz: 确定 CF 用于此特定数据库的锁定使用的内存。 缺省设置为 AUTOMATIC
  • cf_sca_sz: 确定 CF 用于此特定数据库的共享通信区 (SCA) 的内存。 缺省设置为 AUTOMATIC
  • numdb:指定可同时处于活动状态的本地数据库数。 活动数据库的缺省数目为 32。 此参数只有在组重新启动后才生效。
  • DB2_DATABASE_CF_MEMORY: 此注册表变量确定分配给每个数据库 (其中 cf_db_mem_sz 值设置为 AUTOMATIC) 的总 CF 内存的百分比。 此变量仅在组重新启动后生效。 (即,在使用 db2stop 命令关闭整个 Db2 pureScale 实例之后,使用 db2start 命令重新启动实例)。
设置为 AUTOMATIC时,将根据 Db2 pureScale 环境的属性和属性动态生成 CF 内存配置参数的值。

参数关系

注:numdb 的值设置为大于或等于实例上的数据库总数。 此值包括处于活动和不活动状态的数据库。 此外,您可以将 DB2_DATABASE_CF_MEMORY 的值设置为一个值,以便此实例上的每个数据库 (无论是通常处于不活动状态还是处于活动状态) 都可以同时处于活动状态。
集群高速缓存工具 内存参数是在实例级别和数据库级别定义的:
  • 在实例级别,为 CF 保留的内存总量由 cf_mem_sz 配置参数确定。
  • 在数据库级别,数据库的所有 CF 结构所使用的内存总量由 cf_db_mem_sz 配置参数控制。
数据库级别 cf_db_mem_sz 参数定义的内存限制受实例级别 cf_mem_sz 参数约束。 因此,对 cf_db_mem_sz 参数设置了上限: 它不能超过此内存阈值以满足 CF 数据库结构的内存需求。 所有活动数据库的 cf_db_mem_sz 参数值的总和不能超过实例的 cf_mem_sz 的值。

同样,尽管 cf_db_mem_sz 参数控制数据库的所有 CF 结构可使用的内存总量,但数据库管理器在任何时候都不能保留等于 cf_db_mem_sz值的内存块。

用于控制数据库的每个 CF 结构的内存量的配置参数包括:
  • cf_gbp_sz
  • cf_lock_sz
  • cf_sca_sz
CF 在内部使用 3840 4k 页; 这些页取自 cf_mem_sz 参数指定的数量。 此外,还将为实例上的每个活动数据库保留 256 个 4K 页(取自 cf_mem_sz)。 仅当手动设置 cf_mem_sz 参数时,才包括这些附加内存量。

自动配置

cf_mem_sz 参数的缺省设置为 AUTOMATIC。 这意味着可供 CF 使用的内存量是使用 CF 主机上的可用内存总量计算的。 该参数动态设置为:
  • CF 主机上可用内存总量的相应百分比 (通常为 70% 到 90%)。
  • CF 主机上的可用内存量。
以较低值为准。

cf_db_mem_sz 参数的缺省设置为 AUTOMATIC。 实际值是根据在任何成员上首次激活数据库时生效的 DB2_DATABASE_CF_MEMORYcf_mem_sznumdb 参数值确定的。

AUTOMATIC 计算期间考虑的另一个因素是 CF 和任何 Db2 成员是否共存。

CF_DB_MEM_SZ 设置为 AUTOMATIC 时, CF 内存使用者参数 (CF_GBP_SZCF_LOCK_SZCF_SCA_SZ) 将自动设置为 AUTOMATIC。

联机配置

cf_mem_sz 参数不可联机配置。 必须重新启动 CF 服务器才能使新值 cf_mem_sz 生效。

cf_db_mem_sz 参数可联机配置,但有一些约束需要注意:
  • cf_db_mem_sz 的值必须始终小于 cf_mem_sz 的当前值。 如果要将 cf_db_mem_sz 提高至大于 cf_mem_sz 的当前值的值,那么必须先提高 cf_mem_sz 的值。
  • 即使 cf_db_mem_sz 参数提高至小于 cf_mem_sz 参数的值,出现以下这些情况时也会导致错误:
    • 请求联机增加 CF 结构内存参数,其中 CF 结构内存参数的总和 超过 cf_db_mem_sz的值,但 超过 cf_mem_sz 参数设置的阈值上限。 CF 中没有足够的可用内存来满足 CF 结构内存请求,并且会生成错误。
  • cf_db_mem_sz 的值必须始终大于 cf_gbp_szcf_lock_szcf_sca_sz 参数之和。 如果减小了 cf_db_mem_sz 的值,那么还必须减小这三个 CF 结构参数的值,以适应 cf_db_mem_sz 参数设置的已更改内存限制。 如果未能这样做,那么会导致错误,因为 cf_db_mem_sz 参数提供的内存不足。
cf_gbp_szcf_lock_szcf_sca_sz 参数可联机配置,但有一些约束需要注意:
  • 如果系统繁忙或者在提交请求时没有足够的可用 CF 内存,那么任何更改这些参数的尝试都可能导致超时错误。
    注: 虽然在提交请求时内存可能不可用,但系统会继续尝试更新,以防有足够的内存可用于满足请求。 更新操作将等待处理完成。
  • CF 结构内存参数的更新操作期间,如果启动了第二个更新相同结构内存参数的请求,那么会触发错误。

多个活动数据库

在运行多个活动数据库的 Db2 pureScale 环境中,在规划每个活动数据库的内存配置需求时存在其他注意事项。 在此情况下,关键配置参数为 DB2_DATABASE_CF_MEMORY。 此参数与其他 CF 配置参数配合使用,以指示分配给每个数据库的总 CF 内存的百分比。 DB2_DATABASE_CF_MEMORY 参数表示为 浮点数据类型,如果它具有:
值 -1
每个活动数据库的 cf_db_mem_sz 参数的动态生成值等于以下计算的结果:cf_mem_sz 除以 numdb
               cf_mem_sz
cf_db_mem_sz = ---------
                 numdb
这意味着处于活动状态的每个数据库从 cf_mem_sz 接收到相等份额的内存(如果该数据库的 cf_db_mem_sz 参数设置为 AUTOMATIC)。
注: 如果 cf_db_mem_sz 的计算值小于 cf_db_mem_sz 参数的最小值,那么 cf_db_mem_sz 值将自动设置为允许的最小值 cf_db_mem_sz
值 0
Db2 pureScale 环境中的每个数据库都必须手动设置 cf_db_mem_sz 值。 或者,如果 cf_db_mem_sz 的值设置为 AUTOMATIC,那么该数据库将接收到最小允许值 32,768。
介于 0 与 100 之间的值
cf_db_mem_sz 参数的值等于以下计算的结果:
                           db2_database_cf_memory
cf_db_mem_sz = cf_mem_sz * ----------------------
                                     100
注: 如果 cf_db_mem_sz 的计算值小于 cf_db_mem_sz 参数的最小值,那么 cf_db_mem_sz 值将自动设置为允许的最小值 cf_db_mem_sz
值为 100
只有一个数据库能够在 Db2 pureScale 环境中激活,并且它接收由 cf_mem_sz 参数定义的所有 CF 内存。
在使用 DB2_DATABASE_CF_MEMORY 来动态计算 cf_db_mem_sz 参数值的配置中,无论 DB2_DATABASE_CF_MEMORY 参数的设置如何, cf_db_mem_sz 的值都不能小于其允许的最小值。

示例

示例 1: 在此示例中,不会从缺省设置 100更改 DB2_DATABASE_CF_MEMORY 注册表变量。 因此,只有一个数据库接收到所有 CF 内存(此内存量等于 cf_mem_sz 参数定义的值)。 如果创建或启动了第二个数据库,那么该命令将因内存不足错误而失败。 要避免这种情况,以便可以创建具有相等内存共享的第二个数据库,必须修改 CF 内存参数 (这假定 cf_db_mem_sz 设置为 AUTOMATIC):
db2stop
db2 update dbm cfg using numdb 2
db2set db2_database_cf_memory=50
db2start
示例 2: 在此示例中,将更改 DB2_DATABASE_CF_MEMORY 注册表变量,以根据具有两个活动数据库的情况,为所有数据库提供相等的 CF 内存份额:
db2stop
db2 update dbm cfg using numdb 2
db2set db2_database_cf_memory=-1
db2start
db2 connect to INVOICES      # success
db2 connect to HRDEPT        # success
示例 3: 在此示例中,将更改 DB2_DATABASE_CF_MEMORY 注册表变量,以便根据具有 200 个活动数据库的情况,使所有 200 个数据库在 CF 内存中占有相等的份额:
db2stop
db2 update dbm cfg using numdb 200
db2set db2_database_cf_memory=0.5
db2start
示例 4: 在此示例中,根据具有两个活动数据库,将 DB2_DATABASE_CF_MEMORY 注册表变量设置为 AUTO:
db2stop
db2 update dbm cfg using numdb 2
db2set db2_database_cf_memory=AUTO
db2start