博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次诊断和解决CPU利用率超高的例子
阅读量:2437 次
发布时间:2019-05-10

本文共 6086 字,大约阅读时间需要 20 分钟。

业务人员报告说不能登录系统,业务几乎停顿.
听到这个消息首先登录主机执行如下命令

[/@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语句拖垮整个系统的案例.

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

转载于:http://blog.itpub.net/26015009/viewspace-758826/

你可能感兴趣的文章
那上边的到底是 global index还是partition index
查看>>
TABLESPACE tablespace02
查看>>
local nopartition index:
查看>>
PARTITION partition04
查看>>
应该算是系统繁忙,一般社保局下午2点钟工作很忙的。
查看>>
关于temp表空间的问题
查看>>
RAC警示录-----各位兄弟补充
查看>>
关于oracle的dbconsole
查看>>
A. Drop and re-create the inbox.
查看>>
发表于 2008-1-30 12:28
查看>>
关于RAC的GV视图的问题
查看>>
实现具有动态主机IP的域名解析 (转)
查看>>
数据库对象命名规范问题....
查看>>
QUESTION 121
查看>>
Borland : Java , Java ,and Java again ! (转)
查看>>
教三个问题
查看>>
Confronting .NET myths (转)
查看>>
.NET终结了COM? (转)
查看>>
QUESTION 126
查看>>
Delphi语言优化 (转)
查看>>