ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 诊断和解决CPU利用率过高的解决经历

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

原创 Linux操作系统 作者:kiddwyl 时间:2019-07-06 18:30:07 0 删除 编辑

相信熟悉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(.........));

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/111631/viewspace-586475/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Redo Log和Archive Log
请登录后发表评论 登录
全部评论

注册时间:2004-08-27

  • 博文量
    66
  • 访问量
    49909