免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wangdrome
打印 上一主题 下一主题

如何诊断解决单个进程占用CPU资源98%的现象 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-12-25 23:14 |只看该作者

如何诊断解决单个进程占用CPU资源98%的现象

该存储过程是为了做测试用.
在这台主机上,我发现只有是执行时间稍长点的SQL语句,其CPU资源的利用率就很快上升到100%,
如下是对几条SQL执行时truss出来的结果:

1.存储过程的执行:
create or replace procedure cardno_update
is
v_cardno VARCHAR2(12;
i number :=0;
cursor v_customer is select cardno from customer;
begin
open v_customer;
loop
fetch v_customer into v_cardno;
update customer set cardno=lpad(cardno,8,'0') where cardno=v_cardno;
i := i+1;
exit when v_customer%notfound;
end loop;
close v_customer;
dbms_output.put_line('The number be update is: '||i);
end cardno_update;

sql>;exec cardno_update

其truss结果是重复如下的输出,CPU利用率达98%
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
times(0xFFFFFFFF7FFF4740)                       = 424067507
times(0xFFFFFFFF7FFF6390)                       = 424067507
times(0xFFFFFFFF7FFF6600)                       = 424067507
times(0xFFFFFFFF7FFF6390)                       = 424067507
times(0xFFFFFFFF7FFF6600)                       = 424067507


2. sql语句的执行
sql>; SELECT count(*)
    FROM subscription sub
    WHERE sub.status = 2
      AND EXISTS (SELECT 1
                      FROM scplan scp
                      WHERE sub.scplan = scp.id
                        AND scp.type = 1)
      AND EXISTS (SELECT 1
                      FROM customer cus
                      WHERE sub.id = cus.id
                        AND cus.areacode = '05182051'
                        AND joindate >;= to_date('2003-12-01', 'yyyy-mm-dd')
                        AND joindate <= to_date('2003-12-15', 'yyyy-mm-dd') + 1
                        )
其truss结果是重复如下,CPU资源也被耗完
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0
yield()                                         = 0

撇开SQL语句是如何的糟糕,为什么上述那两个过程的一条执行得时间稍长的语句把CPU的资源全部使用完了,令人不解!
谁给帮忙对truss的结果做解释,这些现象是说明系统的CPU存在瓶颈吗?

论坛徽章:
0
12 [报告]
发表于 2003-12-26 17:29 |只看该作者

如何诊断解决单个进程占用CPU资源98%的现象

顶下

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
13 [报告]
发表于 2003-12-26 18:10 |只看该作者

如何诊断解决单个进程占用CPU资源98%的现象

yield和times都是正常的

yield - yield execution to another lightweight process
times - get process and child process times
用如下命令可以看到详细说明
man -s2 yield
man -s2 times

要看CPU或MEM是否存在瓶颈,用snowwin提到的那些XXstat命令。

论坛徽章:
0
14 [报告]
发表于 2003-12-26 18:29 |只看该作者

如何诊断解决单个进程占用CPU资源98%的现象

beginner-bj :
   你好,我认为执行cardno_update这个存储过程,应该不只要把CPU都用完了啊

论坛徽章:
0
15 [报告]
发表于 2003-12-26 22:42 |只看该作者

如何诊断解决单个进程占用CPU资源98%的现象

select sid,event from v$session_wait where event not like '%message%';
查看有什么特殊事件.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP