ORACLE数据库的优化

CPU参数的调整
CPU
服务器的一项重要资,服务器良好的工作状态是在工作高峰时CPU使用在90%以上。如果空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源,如果工作高峰时CPU使用率仍然恨低,说明服务器CPU资源还比较富余。
使用操作相同命令可以看到CPU使用情况,以般UNIX操作系统的服务器,可以使用sar�Cu命令查看CPU使用率,NT操作系统的服务器,可以使用NT性能管理器来查看CPU使用率。
数据库管理员可以通过查看v$sysstatselect*fromv$sysstat wherenamelike'CPU%')数据字典中“CPUused by this session统计项得知ORACLE数据库使用的CPU时间,查看“OS Userlevel CPU time统计项得知操作系统用户态的CPU时间,查看“OS Systemcall CPU time统计项得知操作系统系统态下的CPU时间,操作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占操作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。
数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。(select*fromv$sysstat orderbyvaluedesc
出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。
1
、数据库管理员可以执行下述语句来查看SQL语句的解析情况:
SELECT * FROM V$SYSSTAT
WHERE NAME IN
('parse time cpu', 'parse time elapsed', 'parse count (hard)');
parse time cpu系统服务时间,parse timeelapsed响应时间,用户等待时间
waite time = parse time elapsed �C parse time cpu

由此可以得到用户SQL语句平均解析等待时间=waite time / parse count,这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句
SELECTSQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA
ORDER BY PARSE_CALLS;

来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS值。
2
、数据库管理员还可以通过下述语句:
SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROMV$SQLAREA;
查看低效率的SQL语句,优化这些语句也有助于提高CPU利用率。
3
3、数据库管理员可以通过v$system_eventselect*fromv$system_event where event like'_atch%';)数据字典中的”latchfree统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。
内存参数的调整
内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池数据缓冲区日志缓冲区
1
  1   共享池由两部分构成:共享SQL区和数据字典缓冲区共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句:

select (sum(pins -reloads)) / sum(pins) "Lib Cache" from v$librarycache;

来查看共享SQL区的使用率。这个使用率应在90%以上,否则需要增加共享池大小数据库管理员还可以执行下述语句:

select (sum(gets - getmisses - usage - fixed))/ sum(gets) "Row Cache" from v$rowcache;

查看数据字典缓冲区使用率,这个使用率也应该在90%以上否则需要增加共享池的大小。

2
  2   数据缓冲区.数据库管理员可以通过下述语句:

SELECT name, value  FROM v$sysstat  WHERE name IN ('db block gets', 'consistentgets','physical reads');

来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1 - ( physical reads / (db block gets + consistent gets))

这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。

3
  3   日志缓冲区.数据库管理员可以通过执行下述语句:

select name,value from v$sysstat where name in('redo entries','redo log space requests');查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率:

申请失败率=requests/entries申请失败率应该接近于0否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。


你可能感兴趣的:(数据库,服务器,操作系统,管理员,高峰)