很多的时侯,做oracle dba的我们,当应用管理员向我们通告现在应用很慢、数据库很慢的时侯,我们到数据库时做几个示例的select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各种命种率都是满足oracle文档的建议。实际上如今的优化己经向优化等待(waits)转型了,实际中性能优化最根本的出现点也都集中在io,这是影响性能最主要的方面,由系统中的等待去发现oracle库中的不足、操作系统某些资源利用的不合理是一个比较好的办法,下面把我的一点实践经验与大家分享一下,本文测重于unix环境。
一、通过操作系统的一些工具检查系统的状态,比如cpu、内存、交换、磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲这也可能不是一个正常的状态,因为cpu可能正等待io的完成。除此之外我们还应观注那些占用系统资源(cpu、内存)的进程。
1、如何检查操作系统是否存在io的问题?使用的工具有sar,这是一个比较通用的工具。
rp1#sar -u 2 10
即每隔2秒检察一次,共执行20次,当然这些都由你决定了。
示例返回:
hp-ux hpn2 b.11.00 u 9000/800 08/05/03
18:26:32 %usr %sys %wio %idle
注:我在redhat下查看是这种结果,不知%system就是所谓的%wio
linux 2.4.21-20.elsmp (yy075) 05/19/2005
10:36:07 am cpu %user %nice %system %idle
10:36:09 am all 0.00 0.00 0.13 99.87
10:36:11 am all 0.00 0.00 0.00 100.00
10:36:13 am all 0.25 0.00 0.25 99.49
10:36:15 am all 0.13 0.00 0.13 99.75
10:36:17 am all 0.00 0.00 0.00 100.00
10:36:17 am cpu %user %nice %system %idle
10:36:19 am all 0.00 0.00 0.00 100.00
10:36:21 am all 0.00 0.00 0.00 100.00
10:36:23 am all 0.00 0.00 0.00 100.00
10:36:25 am all 0.00 0.00 0.00 100.00
其中的%usr指的是用户进程使用的cpu资源的百分比,%sys指的是系统资源使用cpu资源的百分比,%wio指的是等待io完成的百分比,这是值得我们观注的一项,%idle即空闲的百分比。如果wio列的值很大,如在35%以上,说明你的系统的io存在瓶颈,你的cpu花费了很大的时间去等待io的完成。idle很小说明系统cpu很忙。像我的这个示例,可以看到wio平均值为11说明io没什么特别的问题,而我的idle值为零,说明我的cpu已经满负荷运行了。
当你的系统存在io的问题,可以从以下几个方面解决
*联系相应的操作系统的技术支持对这方面进行优化,比如hp-ux在划定卷组时的条带化等方面。
*查找oracle中不合理的sql语句,对其进行优化。
*对oracle中访问量频繁的表除合理建索引外,再就是把这些表分表空间存放以免访问上产生热点,再有就是对表合理分区。
2、关注一下内存
常用的工具便是vmstat,对于hp-unix来说可以用glance,aix来说可以用topas,当你发现vmstat中pi列非零,memory中的free列的值很小,glance,topas中内存的利用率多于80%时,这时说明你的内存方面应该调节一下了,方法大体有以下几项。
*划给oracle使用的内存不要超过系统内存的1/2,一般保在系统内存的40%为益。
为系统增加内存
*如果你的连接特别多,可以使用mts的方式
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器