ORACLE数据库导致cpu使用率高的原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE数据库导致cpu使用率高的原因相关的知识,希望对你有一定的参考价值。

用一台机子做服务器,装的ORACLE数据库,但是CPU的使用率不稳定,每隔一分钟或多长时间,cpu的使用率就一下子高了很多,可达90%多,在我们的机子上运行程序时,那CPU的使用率就更高了,就算不读取数据,cpu的使用率也是忽高忽低的。这是怎么回事呀?有具体的原因或解决办法吗?
不是什么内存,注册表之类的问题哦,也不是右键的。 不是自己的机子做服务器。也不是开机时cpu高,服务器就一直开启着,oracle也一直运行着,在不取数据,不执行操作时,Oracle占内存就不稳定;在运行项目时,Oracle更不稳定了,cpu更是忽上忽下的。
select count(*) from jam_status_detect_5 t
where
t.alarm_rank != -1
and t.alarm_confirm_status = 0
and t.status_time >=(select max(s.status_time) from jam_status_detect_5 s )- 0/24
and t.status_time <=(select max(s.status_time) from jam_status_detect_5 s 这条语句该怎样优化 占用时间是3s多

参考技术A Oracle使用过程中的CPU高说明有资源消耗,你看看创建数据库后,是否创建的有短时间内刷新的物化视图?而物化视图的SQL性能又比较低,也会造成CPU不稳定。再就是是否存在周期性的I/O问题?I/O拥塞也会导致CPU高。

另外,关于你的SQL的优化,首先考虑在Where中不要使用子查询,其次,看看执行计划,只贴语句是很难进行调优的。
参考技术B 自己的机子做服务器要把oracle设置成手动的启动,否则你开机就运行很多的资源所以你的cpu会很高。在运行里面输入services.msc进行设置oracle的服务运行状态。 参考技术C select count(*) from jam_status_detect_5 t
where
t.alarm_rank != -1
and t.alarm_confirm_status = 0
and t.status_time >=(select max(s.status_time) from jam_status_detect_5 s )- 0/24
and t.status_time <=(select max(s.status_time) from jam_status_detect_5 s

一条语句遍历三次 要是jam_status_detect_5这张表数据量大的话 那简直就是灾难。。你完全可以只使用一次遍历实现

另外 检查job 估计是有定时任务在执行 而这任务很耗时本回答被提问者采纳

一次ipv6导致Cisco6509cpu高的处理过程

核心交换机是Cisco6509E,出现的问题是cpu从20%飙升到60%
1、在Cisco6509上使用命令 show proc cpu sort 5min 可以查看到导致cpu高的原因是ipv6 input
技术分享图片
2、于是在Cisco6509下面的各个vlan抓包,共计12栋楼
3、主要是抓IPv6的包
技术分享图片
找到mac地址为14:3d:f2:b8:8a:32的主机,在交换机上封口,cpu恢复正常
技术分享图片

以上是关于ORACLE数据库导致cpu使用率高的原因的主要内容,如果未能解决你的问题,请参考以下文章

Oracle查询语句导致CPU使用率过高问题处理

Oracle 占用cpu过高的处理办法

如何查询占CPU高的oracle进程

领导节点CPU高的主要原因

谈谈Tomcat占用cpu高的问题

一次ipv6导致Cisco6509cpu高的处理过程