问题描述:
早上检查发现10.1.1.12生产库上,操作系统pid为692620长时间占用12%左右cpu不释放。
检查结果表名为oracle“ kksfbc child completion ”事件导致。此等待事件一旦出现,
与此时间相关的session不会自动消失,将长时间占用cpu资源。
以下是本次事件的诊断过程:
一、topas检查发现pid为692620长时间占用12%左右cpu不释放。
Name PID CPU% PgSp Owner
oracle 692620 12.5 7.8 oracle
oracle 643822 3.4 7.0 oracle
oracle 590652 3.2 9.9 oracle
oracle 258814 2.4 12.5 oracle
二、检查与此pid的ADDR。
SQL> select c.addr , c.INST_ID from gv$process c where c.spid = '692620';
ADDR INST_ID
---------------- ----------
07000001FC2BF000 2
三、查找此与addr对应的 SQL_HASH_VALUE与SQL_ADDRESS
SQL> select v.SQL_HASH_VALUE, v.SQL_ADDRESS ,v.INST_ID
2 from gv$session v
3 where PADDR = '07000001FC2BF000';
SQL_HASH_VALUE SQL_ADDRESS INST_ID
-------------- ---------------- ----------
1178698040 07000000F128EE68 2
四、根据SQL_HASH_VALUE与SQL_ADDRESS 找到与pid相关的sql,但此sql并不复杂。
SQL> select
2 a.INST_ID,
3 a.SQL_TEXT
4 from gv$sqltext a
5 where a.HASH_VALUE = '1178698040'
6 and a.ADDRESS = '07000000F128EE68'
7 ORDER BY address, hash_value, piece;
INST_ID SQL_TEXT
---------- --------------------------------------------------------------------
2 SELECT * FROM PrpCcarshipTax WHERE PolicyNo= '605012009110000011429'
五、查找数据库中此sql对应的等待时间结果为:"kksfbc child completion"
SQL> select INST_ID,sid ,serial# ,user#,machine from gv$session where PADDR = '07000001FC2BF000';
INST_ID SID SERIAL# USER# MACHINE
---------- ---------- ---------- ---------- ---------------
-----------------------------------------------------------
2 572 37207 31 ca-be00-ser07
1 219 57417 31 ca-be00-ser11
SQL> select w.SID ,w.EVENT from gv$session_wait w where
2 w.EVENT not like'SQL*Net%'
3 and w.INST_ID=2 and w.SID='572';
SID EVENT
---------- -------------------------------------------------
572 kksfbc child completion
六、此事件为oracle的一个bug。此bug在metalink上的id为6795880.8。