本人很喜欢oracle,在工作中也很喜欢总结关于oracle优化cpu使用率的经验教训,下面就这个问题来详细说说吧。cpu是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时cpu的使用率在90%以上。如果空闲时间oracle优化cpu使用率就在90%以上,说明服务器缺乏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时间90%以上,,说明服务器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。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句来发现是什么sql语句解析效率比较低。
select sql_text, parse_calls, executions from v$sqlarea
order by parse_calls;
程序员可以优化这些语句,或者增加oracle参数session_cached_cursors的值。以上介绍oracle优化cpu使用率。
