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 命令重新启动实例)。
参数关系
注: 将 numdb 的值设置为大于或等于实例上的数据库总数。 此值包括处于活动和不活动状态的数据库。 此外,您可以将 DB2_DATABASE_CF_MEMORY 的值设置为一个值,以便此实例上的每个数据库 (无论是通常处于不活动状态还是处于活动状态) 都可以同时处于活动状态。
集群高速缓存工具 内存参数是在实例级别和数据库级别定义的:
- 在实例级别,为 CF 保留的内存总量由 cf_mem_sz 配置参数确定。
- 在数据库级别,数据库的所有 CF 结构所使用的内存总量由 cf_db_mem_sz 配置参数控制。
同样,尽管 cf_db_mem_sz 参数控制数据库的所有 CF 结构可使用的内存总量,但数据库管理器在任何时候都不能保留等于 cf_db_mem_sz值的内存块。
用于控制数据库的每个 CF 结构的内存量的配置参数包括:
- cf_gbp_sz
- cf_lock_sz
- cf_sca_sz
自动配置
cf_mem_sz 参数的缺省设置为 AUTOMATIC。 这意味着可供 CF 使用的内存量是使用 CF 主机上的可用内存总量计算的。 该参数动态设置为:
- CF 主机上可用内存总量的相应百分比 (通常为 70% 到 90%)。
- CF 主机上的可用内存量。
cf_db_mem_sz 参数的缺省设置为 AUTOMATIC。 实际值是根据在任何成员上首次激活数据库时生效的 DB2_DATABASE_CF_MEMORY, cf_mem_sz和 numdb 参数值确定的。
AUTOMATIC 计算期间考虑的另一个因素是 CF 和任何 Db2 成员是否共存。
当 CF_DB_MEM_SZ 设置为 AUTOMATIC 时, CF 内存使用者参数 (CF_GBP_SZ, CF_LOCK_SZ 和 CF_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_sz、cf_lock_sz 与 cf_sca_sz 参数之和。 如果减小了 cf_db_mem_sz 的值,那么还必须减小这三个 CF 结构参数的值,以适应 cf_db_mem_sz 参数设置的已更改内存限制。 如果未能这样做,那么会导致错误,因为 cf_db_mem_sz 参数提供的内存不足。
cf_gbp_sz、cf_lock_sz 和
cf_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 参数设置为 AUTOMATIC)。cf_mem_sz cf_db_mem_sz = --------- numdb
注: 如果 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 内存。
示例
示例 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