`
kiddwyl
  • 浏览: 398776 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

诊断和解决CPU利用率过高的解决经历

阅读更多

相信熟悉Oracle的人经常会碰到一下几个问题:

1. CPU利用率过高

2. 磁盘争抢平凡(IO过高)

3. 执行存储过程中遇到和预计的时间相差很悬殊

以上这几个问题非常棘手,特别是第三点,特别是在金融行业,交易系统一般需要在晚上非交易时间内计算完庞大的数据,否则就会影响到第二天的交易

针对以上几个问题,我来讲一下在一起项目中碰到过的一次Procedure的经历

操作系统:Red Hat Linux 9
数 据 库:Oracle 9.2.0.4
问题描述:原本计算在30分钟运行完的Procedure,居然跑了2个半小时,而且明显CPU过高

首先我们通过查看alert*.log,并没有在运行过程当中出现任何的警告和错误信息

那么我们就要查看一下SQL到底在做些什么事情,查询SQL如下所示:

select sql_text,spid,b.program,process
    from v$sqlarea a,
             v$session b,
             v$process d
    where a.address = b.sql_address
         and a.hash_value = b.sql_hash_value
         and b.paddr = d.addr
         and d.spid in (进程ID);

进程ID我们可以通过TOP命令查看到

 得出有一条SQL语句在运行中竟然耗费了将近1.5小时的时间,并且CPU占用的非常大
 所以基本上可以断定是这条SQL语句造成的,所以我们可以通过以下2个方面来进行处理:

 首先我们通过查看v$session_wait来查看队列,SQL如下:

 SQL>select sid,event,p1,p1text from v$session_wait

 通过查看,大多都属于latch free状态,那么我们就查一下是什么原因产生了latch free状态,SQL如下:

 SQL>select spid from v$process where addr in (select paddr from v$session where sid in(.........));

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics