禁用自动自调整内存
对启用自动自调整内存的数据库,可以通过将将 self_tuning_mem 设置为 OFF 来对整个数据库禁用自调整功能。当 self_tuning_mem 设置为 OFF 时,设置为 AUTOMATIC 的内存配置参数和缓冲池仍为 AUTOMATIC,并且内存区保持其当前大小不变。
接下来我们对示例数据库MYDB1禁用自动自调整内存,使用UPDATE DB CFG命令先把self_tuning_mem设置成OFF,具体如清单9所示:
--清单 9. 禁用自动自调整内存C:\>db2 update db cfg using self_tuning_mem offDB20000I UPDATE DATABASE CONFIGURATION命令成功完成。我们在上面启动自调整内存的时候讲过,由于自调整功能在不同内存区域之间重新分配内存,所以,必须至少启用两个内存区域(例如锁定内存区域和数据库共享内存区域)才能使自调整功能起作用。唯一的例外是由 sortheap 配置参数控制的内存。当仅将 sortheap 设置为 AUTOMATIC 时,将启用 sortheap 的自调整功能。 所以,如果只有一个内存使用者启用了自调整功能(sortheap除外),则还可以有效地对整个数据库取消激活自调整功能,这个时候虽然self_tuning_mem参数被设置成ON,但整个数据库还是取消激活自调整功能。这是因为,当仅启用了一个内存区时,不能对内存进行再分布。
--清单 10. 对locklist禁用自动自调整内存功能C:\>db2 update db cfg using locklist manualSQL5146W 当 "LOCKLIST" 为 "MANUAL" 时,必须将 "MAXLOCKS" 设置为"MANUAL"。"MAXLOCKS" 已设置为 "MANUAL"。如清单10所示,当把locklist禁用自调整功能后,maxlocks也被禁止使用自调整功能。把locklist设置成manual的意思是指对locklist禁用自调整功能,而locklist的当前值(动态调整的参数,在一段时间内是动态的,但在某一个时点,其是静态的,都有一个当前值)保持不变。把maxlocks设置成manual也是同样的意思,就是对maxlocks禁用自调整功能,而maxlocks的当前值也保持不变。此时我们用get db cfg show detail的方式查看数据库配置参数,可以发现locklist和maxlocks的值都被改成固定的值了,具体如清单11所示:
如果要禁用sortheap自调整功能,并同时将sortheap的当前值更改为1000的话,可以如清单12所示进行修改:
--清单 12. 对sortheap禁用自调整功能C:\>db2 update db cfg using sortheap 1000 SHEAPTHRES_SHR 260SQL5155W 成功完成更新。SORTHEAP 的当前值可能对性能