详解Oracle几种性能调优方法
2009-04-02 13:12:30 来源:WEB开发网SQL>SELECT name,phyrds,phywrts FROM v$datafile df,v$filestat fs
WHERE df.file# =fs.file#;
对于使用频率较高的物理文件,可以采用以下策略:
将I/O尽可能平均分配在尽可能多的磁盘上。
为表和索引建立不同的表空间。
将数据文件与重做日志文件分离在不同的磁盘上。
减少不经Oracle SERVER的磁盘I/O。
调整竞争
当多个进程对相同的资源发出申请时,产生竞争。
修改Process参数
该参数定义可以同时连接到Oracle数据库的最大进程数,缺省值为50。注意,Oracle的后台进程也包括在此数目中,建议将该值改为200。
减少调度进程的竞争
减少调度进程的竞争,通过查询v$dispatcher表来判定调度进程的竞争
SQL>SELECT network ,sum(busy)/sum(busy)+sum(idle) FROM v$dispatcher
GROUP BY network;
如果某种协议忙的比率超过50%,应增加MTS-DISPATCHERS的值。
减少多线程服务进程竞争
首先查询V$SYSSTAT表判定是否发生多线程服务进程竞争:
SQL>SELECT DECODE(totalq,0,’No request’,wait/totalq||’hunderths of seconds’) FROM v$sysstat
WHERE type=’common’;
如果共享服务进程数量已达到初始化参数文件中MTS-MAX-SERVERS指定的最大值,但应用运行时,平均请求等待时间仍持续增长,那么,应加大MTS-MAX-SERVERS的值。
减少重做日志缓冲区竞争
通过查询V$SYSSTAT表判定redo log 文件缓冲区是否足够。
SQL>SELECT name,value FROM v$sysstat
WHERE name=’redo log space request’;
此处value的值应接近于0,否则,应增大初始化参数文件的LOG-BUFFEQS的值。
减少回退段竞争
回退段对性能也有影响,根据事物大小情况来分配合适的回退段。
首先判定回退段的数量能否满足系统运行的需要:
查询V$WAITSTAT表与V$SYSSTAT表
SQL>SELECT class,count FROM v$waitstat
WHERE class IN (’system undo header’,system undo block’,
’undo header’,’undo block’);
SQL>SELECT sum(value)
FROM v$sysstat WHERE name IN (’db block gets’,’consistent gets’);
如果任何一个class/sum(value)>10%,那么考虑增加回退段。回退段的数量一般按如下规律设定:
用户数 回退段个数
n<164
1632<=n n/4 但不超过50
减少Free List竞争
当多个进程同时向一个表中插入数据时,产生Free List竞争。
SQL>SELECT class,count FROM v$waitstat
WHERE class=’free list’;
SQL>SELECT sum(value)
FROM v$sysstat
WHERE name IN (’db block gets’,’consistent gets’);
如果class/sum(value)>1%,则应增加该表的Free List 的值。
更多精彩
赞助商链接