您的位置:首页 > 其它

一次诊断和解决CPU利用率高的问题分析

2008-04-26 15:40 525 查看
本文作者:Allan(allan@itpub.net)

经常会遇到CPU利用率很高的情况,这种时候大都是数据库中存在着严重性能低下的SQL语句,这种SQL语句大大的消耗了CPU资源,导致整个系统性能低下。当然,引起严重性能低下的SQL语句的原因是多方面的,具体的原因要具体的来分析,下面通过一个实际的案例来说明如何来诊断和解决CPU利用率高的这类问题。

:solairs8

数据库:Oracle9.2.0.4

问题描述:现场工程师汇报数据库非常慢,几乎所有应用操作均无法正常进行。

首先登陆主机,执行top发现CPU资源几乎消耗殆尽,存在很多占用CPU很高的进程,而内存和I/O都不高,具体如下:

lastpid:26136; loadaverages: 8.89, 8.91, 8.12

216processes:204sleeping,8running,4onCPU

CPUstates: 0.6%idle,97.3%user, 1.8%kernel, 0.2%iowait, 0.0%swap

Memory:8192Mreal,1166Mfree,14Mswapinuse,8179Mswapfree

PIDUSERNAMETHRPRINICE SIZE RESSTATE TIME CPUCOMMAND

25725oracle 1 50 04550M4508MCPU2 12:2311.23%oracle

25774oracle 1 41 04550M4508Mrun 14:2510.66%oracle

26016oracle 1 31 04550M4508Mrun 5:4110.37%oracle

26010oracle 1 41 04550M4508Mrun 4:40 9.81%oracle

26014oracle 1 51 04550M4506MCPU6 4:19 9.76%oracle

25873oracle 1 41 04550M4508Mrun 12:10 9.45%oracle

25723oracle 1 50 04550M4508Mrun 15:09 9.40%oracle

26121oracle 1 41 04550M4506MCPU0 1:13 9.28%oracle

于是先查看数据库的告警日志ALERT文件,并没有发现有什么错误存在,日志显示数据库运行正常,排除数据库本身存在问题。

然后查看这些占用CPU资源很高的Oracle进程究竟是在做什么操作,使用如下SQL语句:

selectsql_text,spid,v$session.program,process from

v$sqlarea,v$session,v$process

wherev$sqlarea.address=v$session.sql_address

andv$sqlarea.hash_value=v$session.sql_hash_value

andv$session.paddr=v$process.addr

andv$process.spidin(PID);

用top中占用CPU很高的进程的PID替换脚本中的PID,得到相应的Oracle进程所执行的SQL语句,发现占用CPU资源很高的进程都是执行同一个SQL语句:

SELECTd.domainname,d.mswitchdomainid,a.SERVICEID,a.SERVICECODE,a.USERTYPE,a.STATUS,a.NOTIFYSTATUS,to_char(a.DATECREATED,'yyyy-mm-ddhh24:mi:ss')DATECREATED,VIPFLAG,STATUS2,CUSTOMERTYPE,CUSTOMERID FROMservicea,gatewaylocb,subbureaunumberc,mswitchdomaind WHEREb.mswitchdomainid=d.mswitchdomainidandb.gatewaysn=c.gatewaysn ANDa.ServiceCodelikec.code||'%'anda.serviceSpecID=1anda.status!='4'anda.status!='10' anda.servicecodelike'010987654321%'andSubsidiaryID=999999999共7页 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: