天天看点

statspack报告与sam配置杂记

最近这段时间刚做了一项性能优化的工作,根据一周的statspack报告,写了一个优化

方案。

一、系统现有的主要性能问题

从最近一周比较典型的STATSPACK报告来看,系统中主要的等待事件如下:

Top 5 Timed Events

~~~~~~~~~~~~~~

Event Waits Time (s) % Total Ela Time

-------------------------------------------- ------------ ----------- ----

CPU time 5,819 46.04

wait for unread message on broadcast channel 3,356 3,374 26.70

db file sequential read 1,100,056 2,454 19.41

buffer busy waits 51,054 274 2.16

db file scattered read 154,540 220 1.74

-------------------------------------------------------------

数据库中有46%的时间花费在CPU相关的操作上。CPU time可以分为3个部分,即CPU

time= parse time CPU + recursive CPU usage +other CPU usage,其中,parse

time CPU表示解析SQL语句所花费的CPU时间,recursive CPU usage表示一些递归SQL

操作花费的CPU时间,other CPU usage代表逻辑读取花费的CPU时间。

变换一下上述公式,other CPU usage=CPU time - parse time CPU - recursive

CPU usage,将我们的STATSPACK报告的相关数据带入该公式other CPU usage=5819-

584-109=5126,由此可见,88%的CPU时间花费在了逻辑读取数据的操作上,另外有

10%的CPU时间花费在了解析SQL语句上。我们可以从优化SQL语句方面入手,降低逻辑

读取。另外,我们也可以在降低SQL解析数方面做些工作。

等待事件wait for unread message on broadcast channel是一个空闲事件,我们无

须处理。

db file sequential read等待事件占总时间的19%,表示物理读取数据,减少该等待

可以从两个方面来考虑,首先是优化SQL,降低不必要的物理读取;另外也可以适当的

增大数据缓冲区,使尽可能多的数据缓存到内存中。

另外一个等待事件buffer busy waits是由大量逻辑读取所导致的内存等待,该事件也

可以通过优化SQL语句来消除。

二、解决方案

根据系统中存在的上述问题,提出如下的优化方案:

1) 优化一些逻辑读和物理读较多的SQL,可以有效减少数据的读取,也可以减少内存

争用;

2) 对一些执行频繁的SQL使用绑定变量,减少花费在解析SQL语句上的CPU时间和内存

栓锁;

3) 适当增大数据缓冲区尺寸,减少物理读。

oracle10g的几个事件解释

http://www.itpub.net/showthread.php?s=&postid=8275075#post8275075

http://www.itpub.net/showthread.php?s=&threadid=833280

案例学习Oracle错误:ORA-00054

http://searchdatabase.techtarget.com.cn/tips/332/2117332_2.shtml

http://www.eygle.com/archives/2005/10/oracle_howto_kill_session.html

可以用kmtune查看

建议用sam调整,不要通过修改文件调整,很麻烦也很不安全,SAM方法:

#sam

回车,进入sam界面,上下箭头调整选项,回车进入,tab键回菜单

--->

SAM      Kernel Configuration          ->回车进入

SAM      Configurable Parameters 回车进入调整参数界面

上下箭头选择参数,空格选中后按tab键移动光标到Actions回车出现下拉菜单,上下

键选中Modify Configurable Parameter...回车进入调整界面。

tab键移动光标,输入新参数后,移动光标到OK,回车,有的可能提示先修改另外一个

参数。完后退出

到Actions---->Process New Kernel,等几分钟后会提示重起系统