Oracle服务器CPU 100%案例分析

今天收到开发人员的反应,公司一个非常重要的系统,数据库服务器CPU消耗100%,几乎全是oracle.exe占用的,但是系统的速度并没有受到太大影响(或许并非高峰期),而且CPU消耗居高不下,导致系统变得很慢。

系统环境:

操作系统:Windows Server 2003 SP2

Oracle:Oracle Enterprise Database 10.2.0.5

开始进行以下检查:

1.查看了告警日志、系统日志都没法发现任何报错,也没有生成有价值的跟踪文件。

2.登录pl/sql查询select * from vsession_wait where wait_class\<\>'Idle'没有任何结果返回(我靠,居然没有返回值),当然查询select \* from vsession where wait_class<>'Idle'也没有返回值。

3.生成一个最新的AWR报告,发现AWR报告也是正常的,没有消耗CPU高的SQL出现,执行时间最长的都不超过3秒。

系统CPU还是100%,还是oracle.exe进程占用。

4.查询select * from v$process where background is null SQL语句,发现大量的ORACLE.EXE (SHAD),google了一下,shad表示的是shadow,就是服务器进程,但这个视图又不能显示出CPU消耗。

5.想起了Windows平台的ProcessExplorer工具:

这个是microsoft提供的系统工具,可以查看非常详细的进程信息,同样能看到非常详细的线程信息,这个工具简直太好用了。通过它找出了oracle.exe进程包含的哪些线程占用CPU高。上面弹出的窗口中的TID对应的就是vprocess.spid字段,这样就可以非常容易的找出是哪个oracle process在消耗CPU,进而能够查出是哪个会话在消耗CPU,是哪个SQL在消耗CPU。值得高兴的是相关的线程全在vprocess中找到,且都是ORACLE.EXE(SHAD)线程,相关的会话也找到了,但是疑惑的是这些会话的VSESSION.WAIT_CLASS都是Idle(具体的等待事件应该是SQL\*Net message from client),但是VSESSION.STATUS都是ACTIVE。我靠这些SQL居然消耗那么多CPU,都快撑爆了。

查了下资料VSESSION.STATUS='ACTIVE'表示当前正在执行的SQL,但为何VSESSION.WAIT_CLASS='Idle',并且从开发人员的角度来说这些SQL不可能执行那么长时间。这是个疑问啊!!!

找出来消耗CPU的会话,这些会话都是业务会话,使用ALTER SYSTEM KILL SESSION 'SID,SERIAL#'语句将这些会话KILL掉,CPU立马恢复正常。

这个问题反映给开发人员,开发人员先检查一下代码再说吧。

根据这种情况在metalink上找到了两篇好的文章:
How to diagnose the high CPU utilization of ORACLE.EXE in Windows environment [ID 273646.1]
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=273646.1

Troubleshooting: High CPU Utilization [ID 164768.1]
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=164768.1

这里提供了ProcessExplorer和qslice两个工具的下载​编辑ProcessExplorer.zip​编辑qslice_setup.rar

​编辑捕获.JPG

相关推荐
韩立学长1 小时前
基于Springboot的旧时月历史论坛4099k6s9(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
cccccc语言我来了1 小时前
(Linux (6):从包管理到工具探索,构建系统操作基础认知)
linux·运维·服务器
TDengine (老段)2 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据
wuk9982 小时前
CentOS7环境搭建L2TP服务器
运维·服务器
恒创科技HK2 小时前
香港1核2G云服务器当网站服务器够用不?
运维·服务器
IT 小阿姨(数据库)2 小时前
PostgreSQL 之上的开源时序数据库 TimescaleDB 详解
运维·数据库·sql·postgresql·开源·centos·时序数据库
学习3人组3 小时前
Node.js 网站服务器开发
运维·服务器·node.js
来知晓3 小时前
Linux:WSL内存空间管理之清完内存C盘可用空间不增问题解决
linux·运维·服务器
熊文豪3 小时前
openEuler 云原生实战:部署高性能 Redis 集群与压测分析
数据库·redis·云原生·openeuler
GTgiantech4 小时前
科普SFP 封装光模块教程
服务器·网络·数据库