- 论坛徽章:
- 0
|
如何诊断解决单个进程占用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存在瓶颈吗? |
|