一次诊断和解决CPU利用率超高的例子

业务人员报告说不能登录系统,业务几乎停顿.

听到这个消息首先登录主机执行如下命令

[/@zzld03]#sar -u 1 10

 

HP-UX zzld03 B.11.23 U ia64    04/16/13

 

10:32:25    %usr    %sys    %wio   %idle

10:32:26      63       1      26      10

10:32:27      53       1      23      23

10:32:28      49       3      33      16

10:32:29      43       1      39      18

10:32:30      39       1      34      26

10:32:31      35       0      40      24

10:32:32      41       1      37      21

10:32:33      43       1      42      15

10:32:34      40       4      40      15

10:32:35      57      11      27       5

 

Average       46       2      34      17

发现cpu消耗很高

执行top命令检查

从上面的top命令的监控情况来看pid=9362的进程消耗了95.55%的cpu

select s.sid,s.username,s.event,s.wait_time,s.state,s.seconds_in_wait,p.PROGRAM,s.MACHINE

from v$session s,v$process p

where p.spid=9362 and s.PADDR=p.ADDR

根据进程9362找到的语句如下:

select tt.indi_id as indi_id,         tt.folk_code as folk_code,         tt.urban_type as urban_type,         e.mt_pers_type as pers_type,         tt.pers_type as pers_type_detail,         tt.culture_code as culture_code,         tt.housereg_type as housereg_type,         tt.job_sta_code as job_sta_code,         tt.city_code as city_code,         tt.occu_grade_code as occu_grade_code,         tt.indi_sta as indi_sta,         tt.kindred_code as kindred_code,         tt.insr_code as insr_code,         tt.name as name,         decode(tt.sex, '1', '男', '0', '女', '未知') as sex,         to_char(tt.birthday, 'yyyy-mm-dd') as birthday,         tt.idcard as idcard,         tt.native as native,         to_char(tt.job_date, 'yyyy-mm-dd') as job_date,         tt.retire_date as retire_date,         tt.telephone as telephone,         tt.address as address,         tt.post_code as post_code,         tt.marri_sta as marri_sta,         tt.pre_job_years as pre_job_years,         tt.all_job_years as all_job_years,         tt.host_indi_id as host_indi_id,         tt.nothing_flag as nothing_flag,         tt.speical_pers_flag as speical_pers_flag,         tt.remark as remark,         d.folk_name as folk_name,         e.pers_name as pers_name,         f.culture_name as culture_name,         g.housereg_name as housereg_name,         h.job_sta_name as job_sta_name,         i.city_name as city_name,         i.city_class as city_class,         j.occu_grade_name as occu_grade_name,         k.indi_sta_name as indi_sta_name,         l.kindred_name as kindred_name,         tt.insr_detail_code as insr_detail_code,         tt.corp_id as corp_id,         to_char(tt.begin_date, 'yyyy-mm-dd') as begin_date,         to_char(tt.end_date,'yyyy-mm-dd') as end_date,         tt.indi_join_sta as indi_join_sta,         tt.occu_code as occu_code,         tt.freeze_sta as freeze_sta,         tt.posi_code as posi_code,         tt.hire_type as hire_type,         tt.work_type as work_type,         nvl(tt.official_code, '00') as official_code,         tt.special_code as special_code,         tt.indi_ins_no as indi_ins_no,         tt.total_salary as total_salary,         tt.indi_join_flag as indi_join_flag,         m.occupation_name as occupation_name,         n.position_name as position_name,         o.hire_name as hire_name,         p.work_type_name as work_type_name,         q.special_name as special_name,         tt.corp_name as corp_name,         tt.corp_code as corp_code,         tt.corp_type_code as corp_type_code,         tt.corp_type_name as corp_type_name,         tt.center_id as center_id,         tt.veteran_benefit_name as veteran_benefit,         decode(tt.official_code,'0','一般干部','1','副厅以上','2','副厅以下', t.official_name) as official_name,         u.center_name as center_name,         nvl(v.last_balance, 0) as last_balance    from (select /*+rule*/           a.indi_id,           a.folk_code,           a.urban_type,           a.pers_type,           a.culture_code,           a.housereg_type,           a.job_sta_code,           a.city_code,           a.occu_grade_code,           a.indi_sta,           a.kindred_code,           a.insr_code,           a.name,           a.sex,           a.birthday,           a.idcard,           a.native,           a.job_date,           a.retire_date,           a.telephone,         a.address,           a.post_code,           a.marri_sta,           a.pre_job_years,           a.all_job_years,           a.host_indi_id,           a.nothing_flag,           a.speical_pers_flag,           decode(a.city_code,null,a.remark,(select city.city_name From bs_city city where city.city_code = a.city_code)) remark,           (select bct.corp_type_name From bs_corp_type bct where bct.corp_type_code = s.corp_type_code and bct.center_id = s.center_id) corp_type_name,           b.insr_detail_code,           b.corp_id,           b.begin_date,           b.end_date,           b.indi_join_sta,           c.occu_code,           decode( decode(nvl(p.freeze_sta,'0'),'0',nvl(b.freeze_sta, '0'),'1','9') , '0', '基金未冻结', '1','基金已冻结','9','单位已冻结') as freeze_sta,           c.posi_code,           c.hire_type,           c.work_type,           nvl(x.veteran_benefit_name,'非优抚对象') as veteran_benefit_name,    decode(a.pers_type,'3',nvl(c.office_grade,'0'),c.official_code) as official_code,           c.special_code,           c.indi_ins_no,           c.total_salary,           c.indi_join_flag,           s.corp_name,           s.corp_code,           s.corp_type_code,           s.center_id            from bs_corp s,                  bs_pres_insur b,                  bs_corp_insure p,                  bs_corp_pres c,                  bs_veteran_benefit x,                  bs_insured a   where (a.idcard  ='430204850922611' or a.idcard = '430204198509226110') and   a.indi_id = b.indi_id and       a.veteran_benefit_type = x.veteran_benefit_type(+) and                              decode(b.insr_detail_code,'12','2','21','2','17','2',b.insr_detail_code) = DECODE(a.Sex||'~'||a.Pers_Type||'~'||C.INDI_JOIN_FLAG||'~'||'2','0~1~1~7','2','0~2~1~7','2','2') and   decode(p.insr_detail_code,'12','2','21','2','17','2',p.insr_detail_code) = DECODE(a.Sex||'~'||a.Pers_Type||'~'||C.INDI_JOIN_FLAG||'~'||'2','0~1~1~7','2','0~2~1~7','2','2') and   s.corp_id = c.corp_id and                              s.corp_id = p.corp_id and                              b.insr_detail_code = p.insr_detail_code and   b.indi_id = c.indi_id and                              b.corp_id = s.corp_id) tt,                             bs_folk d,                                             bs_person_type e,                                      bs_culture_stac f,                                     bs_housereg_type g,                                    bs_job_stac h,                                         bs_city i,                                             bs_occupation_grade j,                                 bs_pers_status k,                                      bs_kindred l,                                          bs_occupation m,                                       bs_position n,                                         bs_hired_type o,                                       bs_work_type p,                                        bs_special q,                                          bs_official t,                                         bs_center u,                                           bs_mdi_indi_acc v                                      where tt.folk_code = d.folk_code (+) and                     tt.pers_type = e.pers_type (+) and                     tt.center_id = e.center_id (+) and                     tt.culture_code = f.culture_code (+) and               tt.housereg_type = g.housereg_type (+) and             tt.job_sta_code = h.job_sta_code (+) and               tt.city_code = i.city_code (+) and                     tt.occu_grade_code = j.occu_grade_code (+) and         tt.indi_sta = k.indi_sta (+) and                     tt.kindred_code = l.kindred_code (+) and               tt.occu_code = m.occu_code (+) and                     tt.posi_code = n.posi_code (+) and                     tt.hire_type = o.hire_type (+) and                     tt.work_type = p.work_type (+) and                     tt.special_code = q.special_code (+) and               tt.official_code = t.official_code (+) and             tt.indi_id = v.indi_id (+) and                         1 = v.acco_sta (+) and                                 tt.center_id = u.center_id                         and tt.center_id in ('430300')             

后通过查看该语句的执行计划,发现没有选择合适的索引造成的,而没有选择合适的索引是因为在查询中使用了/*+rule */提示,将该提示去掉后,语句执行正常cpu的利用率也恢复正常,应用也恢复正常.

这就是典刑的一条sql语句拖垮整个系统的案例.

时间: 2024-11-05 14:50:24

一次诊断和解决CPU利用率超高的例子的相关文章

(转)如何诊断和解决CPU高度消耗(100%)的数据库问题

如何诊断和解决CPU高度消耗(100%)的数据库问题 2008-05-24 13:46 链接:http://www.eygle.com/archives/2004/10/howto_getsql_which_cost_most_cpu.html 很多时候我们的服务器可能会经历CPU消耗100%的性能问题. 排除系统的异常,这类问题通常都是因为系统中存在性能低下甚至存在错误的SQL语句, 消耗了大量的CPU所致. 本文通过一个案例就如何捕获这样的SQL给出一个通用的方法. 问题描述:系统CPU高度

微软修复SVCHOST漏洞解决CPU利用率的问题

SVCHOST是微软操作系统中的一项进程,微软官方对它的解释是:SVCHOST进程是从动态链接库(DLL)中运行的服务的通用主机进程名称. 这个程序对系统的正常运行是非常重要,而且是不能被结束的.此前这个进程出现漏洞并困扰着许多用户长达几个月之久,这个漏洞使得XP系统运行过程中CPU 的利用率居高不下.微软在去年11月份的时候尝试修复这个漏洞,但是并没有成功.微软此后也宣布将会继续努力修复这个漏洞. 近日,微软为旗下产品发布了一系列更新,其中包括了Windows XP在内.来自WindowsIT

怎么解决360极速浏览器CPU利用率高电脑卡慢

  怎么解决360极速浏览器CPU利用率高电脑卡慢         这个情况的出现不是因为电脑配置低,而是因为360极速浏览器播放视频, 或者进入有flash内容的网站的时候,需要用到flash播放插件.这里就容易出现两个问题导致CPU利用率极高: 1.浏览器没有调用浏览器内置的flash插件,而是不停调用系统安装的flash软件,导致CPU利用高. 2.部分集成显卡的电脑,因为浏览器打开了硬件加速的视频解码.但是集显的GPU太弱导致解码失败,CPU就一直不停尝试把解码任务推给GPU,从而就导致

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件                                           procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法   实验数据 某一线程Cpu使用率的计算 计算方法   实验数据 多核情况下cpu使用率

Oracle中捕获问题SQL解决CPU过渡消耗

oracle|解决|问题 本文通过实际业务系统中调整的一个案例,试图给出一个常见CPU消耗问题的一个诊断方法.大多数情况下,系统的性能问题都是由不良SQL代码引起的,那么作为DBA,怎样发现和解决这些SQL问题就显得尤为重要. 本案例平台为UNIX,所以不可避免的应用了一些Unix下常用的工具.如vmstat,top等. 本文适宜读者范围:中高级. 系统环境: OS: Solaris8 Oracle: 8.1.7.4 问题描述: 开发人员报告系统运行缓慢,已经影响业务系统正常使用.请求协助诊断.

【沉淀】访谈阿里孙伟光:多行善事莫问前程的他,将计算集群的CPU利用率从30%提升到70%+

<沉淀>是展示专家风采的人物栏目.它呈现每个专家独一无二的人生经历.认识和感悟的同时,也能帮助你沉淀技术,收获对技术和人生的判断.我们的想法是:"若你想精进为一个很厉害的人,不妨细细品味这些技术牛人背后的沉淀."如果你想了解这些云栖专家更多分享时,请点击云栖专家频道,当然我们也欢迎你往前走一步,成为我们的云栖专家(https://yq.aliyun.com/expert),与技术大牛一起"煮酒论英雄". 提到程序员三个字,有些人的固有印象里会立马冒出如下

数据中心效率普遍低下 CPU利用率仅为6%

美国知名IT杂志<连线>网络版周一刊登评论文章称,如果说计算机产业的一个不为人知的秘密是数据中心服务器效率极为低下,那么该秘密幕后的秘密是:该产业从业人士及研究人员并不了解这种效率低下已经糟糕到何种程度. 以下为文章全文: 从表面上看,这似乎只是一个很简单的问题.在各个大型数据中心内部,相关技术员工在解决计算能力不足问题时,往往有这样一种心态:在原有服务器基础上再增加额外服务器.这些人员认为,只要叠加一些处理器,不但能够使数据中心保持正常运转,而且也可避免自己丢掉饭碗.然而对于这些服务器的性能

诊断并解决ORA-04031 错误

原文转自冯大辉老师的博客:http://www.dbanotes.net/Oracle/Ora-04031.htm 诊断并解决ORA-04031 错误 当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先清除池中当前没使用的所有对象,使空闲内存块合并.如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031 错误. 当这个错误出现的时候你得到的错误解释信息类似如下: 04031, 00000, "unable to allocate %s bytes of shared

iis7-server is too busy. 服务器cpu利用率正常,访问量正常。

问题描述 server is too busy. 服务器cpu利用率正常,访问量正常. 如题: server is too busy. 系统是windows 2008,IIS7.服务器cpu利用率正常,网络性能,访问量正常.请问怎样解决. 网上有一些IIS6的解决办法,试了一下,没起作用. 解决方案 检查下iis的最大连接数是否限制了. 解决方案二: 检查下iis的最大连接数是否限制了. 解决方案三: 服务器正在维护中 解决方案四: 查看一下IIS的log,或系统日志中有没有描述为什么busy