DB2性能调优
DB2 UDB性能调优
目录 TOC \o "1-9" DB2 UDB性能调优文档1目录31.文档说明42.数据库配置53.性能监控164.性能优化265.附录58
1.文档说明1.1目的本文档用于指导DB2 UDB数据库的参数配置、性能监控、性能优化,它提供了DB2性能问题处理的通用思路和常规解决办法。1.2术语及说明本文提及术语来自于信息中心以及IBM官方网站。2.数据库配置优化在进行系统分析确定性能问题的根源时,要先检查数据库的配置,这包括DB2注册变量(Registry Variable)、DBM参数、DB参数等。如果发现是配置的问题,那么就可以通过调整配置来解决问题。
2.1硬件配置首先,需要确认CPU的配置。其他的硬件配置都可以从CPU配置进行推导。而CPU应该采取什么配置,可以从现有系统的经验来进行判断。例如:一个新系统需要处理超出现有系统50%的用户请求,且每个用户运行的SQL语句的复杂度也与现有系统类似,那么我们就可以假设新系统需要超出现有系统50%的CPU能力。
内存的主要作用是避免I/O操作。通常来说,拥有更多内存的系统性能更好。我们认为为每个处理器内核配置4~8GB内存是相对合适的。
对于使用RAID存储的情况,通常应该为每个处理器内核配置最少10~20个磁盘。
为DB2事务日志分配专门的专用的磁盘。这是因为日志I/O特性与DB2容器有很大的不同。日志I/O与其它类型的I/O的竞争可能导致日志成为一个瓶颈,尤其是对于那些有大量数据行写入行为的系统。
2.2操作系统配置2.2.1 AIX配置如果DB2运行在AIX系统上,建议使用VMO命令将系统参数maxperm%设置为90,maxclient%设置为90,minperm%设置为3,lru_file_repage设置为0。
我们可以使用”vmo -a”命令(在AIX 6.1中,需要使用” vmo -a -F”命令)查看VMM参数。另外,使用vmo命令可以设置这些参数:(立即生效)vmo -p -o maxperm%=90 -o maxclient%=90 -o minperm%=3 -o lru_file_repage=0可选的,我们可以根据需要来决定是否将page_steal_method参数设置1。
关于VMM参数的说明请参考5.1小节。
此外,应该根据需要调整系统参数maxservers。这个参数是为CPU创建的处理异步I/O的内核进程数,默认为每CPU 10个。可以使用如下步骤来设置该参数:收集ps – elfk | grep aio的输出并且判断是否所有的异步 I/O(AIO)核心进程(aioservers)消耗同样数量的 CPU 时间。如果是,maxservers 可能太少了。增加 10% 的 maxservers 然后重复第一步。如果多于10%的异步I/O核心进程使用较少的CPU时间,就降低10%的maxservers并重复第一步。否则,如果有些异步I/O核心进程使用的CPU时间较少,但数量不超过10%,说明当前的maxservers设置满足需要。
参数 maxreqs 应该被设置成 MAX(NUM_IOCLEANERS x 256,4096)。这个参数用于控制绝大多数突发的异步I/O请求。
Hdisk参数queue_depth定义了应该基于队列的物理硬盘数目。例如,对于IBM 磁盘queue_depth的默认值是3,建议这个值设为3 x磁盘数。这个控制参数可排队的磁盘请求。
硬盘适配器参数num_cmd_elems应该被设为所有连接到这个适配器的设备queue_depth的总和。
2.2.2 Solaris和HP-UX配置对于在Solaris或HP-UX上运行的DB2,可以利用db2osconf工具得到内核参数推荐值。db2osconf基于内存和CPU能力以及缩放系数(期望的工作负载与当前工作负载的比率)根据现有系统配置来推断得到未来期望的配置。运行大型系统如SAP应用程序时,应该使用2或者更高的缩放系数。在Solaris和HP-UX平台,db2osconf提供了很好的初始值。2.2.3 Linux配置在Linux系统上运行DB2时,SHMMAX(共享内存的最大值)应设为可用内存的90%以上,其默认值为8GB。其他重要的内核配置参数以及推荐值如下:kernel.sem(内核旗语): 25025600032kernel.msgmni(消息队列的标识数): 1024kernel.msgmax(一个消息的最大大小,单位:字节): 65536kernel.msgmnb(消息队列的默认大小,单位:字节): 655362.3 DB2注册变量、DBM参数、DB参数配