Oracle服务器CPU 100%案例分析(转)

  Oracle服务器CPU 100%案例分析  2011-10-18 16:22:39

分类: Linux

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

系统环境:
操作系统:Windows Server 2003 SP2
Oracle:Oracle Enterprise Database 10.2.0.5

开始进行以下检查:
1.查看了告警日志、系统日志都没法发现任何报错,也没有生成有价值的跟踪文件。
2.登录pl/sql查询select * from v$session_wait where wait_class<>'Idle'没有任何结果返回(我靠,居然没有返回值),当然查询select * from v$session 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对应的就是v$process.spid字段,这样就可以非常容易的找出是哪个oracle process在消耗CPU,进而能够查出是哪个会话在消耗CPU,是哪个SQL在消耗CPU。值得高兴的是相关的线程全在v$process中找到,且都是ORACLE.EXE(SHAD)线程,相关的会话也找到了,但是疑惑的是这些会话的V$SESSION.WAIT_CLASS都是Idle(具体的等待事件应该是SQL*Net message from client),但是V$SESSION.STATUS都是ACTIVE。我靠这些SQL居然消耗那么多CPU,都快撑爆了。
        查了下资料V$SESSION.STATUS='ACTIVE'表示当前正在执行的SQL,但为何V$SESSION.WAIT_CLASS='Idle',并且从开发人员的角度来说这些SQL不可能执行那么长时间。这是个疑问啊!!!
       找出来消耗CPU的会话,这些会话都是业务会话,使用ALTER SYSTEM KILL SESSION 'SID,SERIAL#'语句将这些会话KILL掉,CPU立马恢复正常。
       这个问题反映给开发人员,开发人员先检查一下代码再说吧。

本人转自http://blog.itpub.net/23135684/viewspace-709301/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手,深入研究相关技术,并结合性能调整及丰富的诊断案例,力图将Oracle知识全面、系统、深入地展现给读者。   本书给出了大量取自实际工作现场的实例,在分析实例的过程中,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 第1章 数据库的启动和关闭 1 1.1 数据库的启动 1 1.1.1 启动数据库到NOMOUNT状态的过程 2 1.1.2 启动数据库到MOUNT状态 18 1.1.3 启动数据库OPEN阶段 26 1.2 数据库的访问 37 1.2.1 客户端的TNSNAMES.ORA文件配置 37 1.2.2 服务器端的监听器文件listener.ora配置 39 1.2.3 通过不同服务器名对数据库的访问 41 1.2.4 动态监听器注册服务 42 1.3 数据库的关闭 46 1.3.1 数据库关闭的步骤 46 1.3.2 几种关闭方式的对比 48 第2章 控制文件与数据库初始化 51 2.1 控制文件的内容 51 2.2 SCN 53 2.2.1 SCN的定义 53 2.2.2 SCN的获取方式 53 2.2.3 SCN的进一步说明 54 2.3 检查点(Checkpoint) 57 2.3.1 检查点(Checkpoint)的工作原理 57 2.3.2 常规检查点与增量检查点 59 2.3.3 LOG_CHECKPOINT_TO_ALERT参数 63 2.3.4 控制文件与数据文件头信息 64 2.3.5 数据库的启动验证 66 2.3.6 使用备份的控制文件 70 2.3.7 FAST_START_MTTR_TARGET 71 2.3.8 关于检查点执行的案例 74 2.3.9 Oracle 10g自动检查点调整 75 2.3.10 检查点信息及恢复起点 78 2.3.11 正常关闭数据库的状况 78 2.3.12 数据库异常关闭的情况 80 2.3.13 数据库并行恢复案例一则 82 2.3.14 判断一个死事务的恢复进度 85 2.4 数据库的初始化 86 2.4.1 bootstrap$及数据库初始化过程 86 2.4.2 bootstrap$的定位 88 2.4.3 Oracle中独一无二的Cache对象 89 2.4.4 Oracle数据库的引导 91 2.4.5 系统对象与bootstrap$ 92 2.4.6 bootstrap$的重要性 94 2.4.7 BBED工具的简要介绍 95 2.4.8 坏块的处理与恢复 97 第3章 参数及参数文件 103 3.1 初始化参数的分类 103 3.1.1 推导参数(Derived Parameters) 103 3.1.2 操作系统依赖参数 104 3.1.3 可变参数 104 3.1.4 初始化参数的获取 105 3.2 参数文件 107 3.2.1 PFILE和SPFILE 108 3.2.2 获取参数的视图 110 3.2.3 SPFILE的创建 111 3.2.4 SPFILE的搜索顺序 112 3.2.5 使用PFILE/SPFILE启动数据库 112 3.2.6 修改参数 113 3.2.7 解决SPFILE参数修改错误 118 3.2.8 重置SPFILE中设置的参数 120 3.2.9 判断是否使用了SPFILE 120 3.2.10 SPFILE的备份与恢复 121 3.2.11 Oracle 11g参数文件恢复 127 3.2.12 如何设置Events事件 128 3.2.13 导出SPFILE文件 129 3.3 诊断案例之一:参数文件 131 3.3.1 登录系统检查告警日志文件 131 3.3.2 尝试重新启动数据库 132 3.3.3 检查数据文件 132 3.3.4 MOUNT数据库,检查系统参数 133 3.3.5 检查参数文件 133 3.3.6 再次检查alert文件 134 3.3.7 修正PFILE 135 3.3.8 启动数据库 135 3.4 诊断案例之二:RAC环境参数文件 135 3.4.1 数据库资源异常 135 3.4.2 问题的发现 136 3.4.3 参数文件问题的解决 137 第4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值