本人很喜欢Oracle在工作中也很喜欢总结关于Oracle优化CPU使用率的经验教训下面就这个问题来详细说说吧CPU是服务器的一项重要资源服务器良好的工作状态是在工作高峰时CPU的使用率在%以上如果空闲时间Oracle优化CPU使用率就在%以上说明服务器缺乏CPU资源如果工作高峰时Oracle优化CPU使用率仍然很低说明服务器CPU资源还比较富余
查看Oracle优化CPU使用率
使用操作相同命令可以看到CPU的使用情况一般Unix操作系统的服务器可以使用sar u命令查看Oracle优化CPU使用率Windows NT操作系统的服务器可以使用性能管理器来查看CPU的使用率
查看数据库使用CPU的时间
可以通过查看V$SYSSTAT数据字典中CPU used by this session统计项得知Oracle数据库使用的CPU时间查看OS User level CPU time统计项得知操作系统的用户态下CPU时间查看OS System call CPU time统计项得知操作系统的系统态下CPU时间操作系统总的CPU时间就是用户态和系统态时间之和如果Oracle数据库使用的CPU时间占操作系统总的CPU时间%以上说明服务器CPU基本上被Oracle数据库使用着反之则说明服务器CPU被其它程序占用过多Oracle数据库无法得到更多的CPU时间
数据库管理员还可以通过查看V$SYSSTAT数据字典来获得当前连接Oracle数据库各个会话占用的CPU时间从而得知什么会话耗用服务器CPU比较多出现CPU资源不足的情况是很多的SQL语句的重解析低效率的SQL语句锁沖突都会引起CPU资源不足
查看SQL语句的解析情况
数据库管理员可以执行下述语句来查看SQL语句的解析情况
SELECT * FROM V$SYSSTAT
WHERE NAME IN
(parse time cpu parse time elapsed parse count (hard));
这里parse time cpu是系统服务时间parse time elapsed是响应时间用户等待时间waite time = parse time elapsed parse time cpu
由此可以得到用户SQL语句平均解析等待时间=waite time / parse count这个平均等待时间应该接近于如果平均解析等待时间过长数据库管理员可以通过下述语句来发现是什么SQL语句解析效率比较低
SELECT SQL_TEXT PARSE_CALLS EXECUTIONS FROM V$SQLAREA
ORDER BY PARSE_CALLS;
程序员可以优化这些语句或者增加Oracle参数SESSION_CACHED_CURSORS的值以上介绍Oracle优化CPU使用率