技术开发 频道

DB2 V9自动自调整内存详解

禁用自动自调整内存 

    对启用自动自调整内存的数据库,可以通过将将 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 off DB20000I UPDATE DATABASE CONFIGURATION命令成功完成。
    我们在上面启动自调整内存的时候讲过,由于自调整功能在不同内存区域之间重新分配内存,所以,必须至少启用两个内存区域(例如锁定内存区域和数据库共享内存区域)才能使自调整功能起作用。唯一的例外是由 sortheap 配置参数控制的内存。当仅将 sortheap 设置为 AUTOMATIC 时,将启用 sortheap 的自调整功能。 所以,如果只有一个内存使用者启用了自调整功能(sortheap除外),则还可以有效地对整个数据库取消激活自调整功能,这个时候虽然self_tuning_mem参数被设置成ON,但整个数据库还是取消激活自调整功能。这是因为,当仅启用了一个内存区时,不能对内存进行再分布。 

    当相互关联的内存配置参数,比如locklist和maxlocks,当一个被禁止使用自调整功能,则另一个也将被停止自调整功能。我们对locklist禁用自调整功能,如清单10所示:
--清单 10. 对locklist禁用自动自调整内存功能 C:\>db2 update db cfg using locklist manual SQL5146W 当 "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 260 SQL5155W 成功完成更新。SORTHEAP 的当前值可能对性能产生负面影响。
    对其他的内存配置参数也禁用自调整功能,具体如清单13所示:
--清单 13. 对DATABASE_MEMORY、PCKCACHESZ禁用自调整功能 C:\>db2 update db cfg using DATABASE_MEMORY manual DB20000I UPDATE DATABASE CONFIGURATION命令成功完成。 C:\>db2 update db cfg using PCKCACHESZ manual DB20000I UPDATE DATABASE CONFIGURATION命令成功完成。

 

    对缓冲池禁用自调整功能,可以通过将缓冲池的大小设成-1或固定值的方式,该缓冲池的 NPAGES 值为 -1 时,DB2 数据库配置参数 BUFFPAGE 控制着缓冲池的大小。当值为-2的时候,代表启用自调整功能(真正有效需要两个方面的因素,第一,需要self_tuning_mem参数设置为ON,第二,至少还存在一个别的内存区域,比如DATABASE_MEMORY)。具体如清单14所示:

--清单 14. 对缓冲池禁用自调整功能 C:\>db2 alter bufferpool mybp1 size 100 DB20000I SQL命令成功完成。 C:\>db2 alter bufferpool mybp2 size 100 DB20000I SQL命令成功完成。 C:\>db2 alter bufferpool ibmdefaultbp size 100 DB20000I SQL命令成功完成。

 

    此时我们通过访问sysibm.sysbufferpools可以看到mybp1、mybp2和ibmdefaultbp的NPAGES字段都设置成了100了,具体如清单15所示:

-清单 15. 查看缓冲池 BPNAME NPAGES ---------------------------- ----------- IBMDEFAULTBP 100 MYBP1 100 MYBP2 100 3 条记录已选择。

 

    以上,我们对自调整内存进行了详细的介绍,不过,自调整内存也存在着局限性,在少量内存可用的情况下(例如,因为 database_memory 的值设置得很小,或者因为多个数据库、实例或其他应用程序正在服务器上运行),自调整内存带来的性能好处将有限。 

    因为自调整内存根据数据库工作负载作出调整决定,所以内存特征不断变化的工作负载将限制自调整内存的能力以有效地进行调整。如果工作负载的内存特征不断变化,则自调整内存调整内存的频率将会降低,并且将重复调整以改变目标条件。在这种情况下,自调整内存将无法获得绝对汇合,而是尝试维护调整为当前工作负载的内存配置。

0
相关文章