一次诊断和解决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
经常会遇到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
相关文章推荐
- 一次诊断和解决CPU利用率高的问题分析
- oracle 一次诊断和解决CPU利用率高的问题分析
- CPU利用率异常分析讨论会-问题诊断思路
- CPU利用率异常分析讨论会-问题诊断思路
- Oracle诊断案例----如何捕获问题SQL解决过度CPU消耗问题
- Oracle诊断案例----如何捕获问题SQL解决过度CPU消耗问题
- 一次比较麻烦的性能问题诊断及解决
- 如何诊断和解决CPU高度消耗(100%)的数据库问题
- cpu load过高问题分析和解决
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
- DBA案例分析:如何解决CPU占用100%的问题
- Oracle诊断案例---如何诊断和解决CPU高度消耗(100%)的数据库问题
- 性能优化分析案例---解决SQL语句过度消耗CPU问题
- 分享一次分析/解决支付应用性能问题的全过程,细节和采用的工具和方法 推荐
- 如何诊断和解决CPU高度消耗(100%)的数据库问题
- 解决并分析mysqld-nt.exe大量占用CPU问题
- 解决并分析mysqld-nt.exe大量占用CPU问题
- java应用cpu占用过高问题分析及解决方法
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
- oracle CPU使用太高 如何诊断和解决CPU高度消耗(100%)的数据库问题