适用于:
Oracle服务器 – 企业版 - Version: 9.2.0.1 to 11.1.0.6 - Release: 9.2 to 11.1
HP-UX Itanium服务器
Oracle Server 企业版- Version: 9.2.0.1 to 11.1.0.6
症状:
在下列各项之一中,进程挂起、不确定的等待:
cursor: pin S wait on X (10g wait)
kksfbc child completion
SGA: 分配强制组件的增长。
没有理由的没有块相关操作进程。
从pw_wait() HP-UX系统的调用相关问题这个事实中,各种各样的等待事件得到了解释。
因此,上面列表不是无遗漏的,下面使用pstack输出所有情况下匹配的问题。
这个一个普遍的问题,就像平行执行子进程会影响一些oracle进程。
一个生成systemstate、processstate、或者errorsstack dump文件的命令:
ALTER SESSION or oradebug command frees the hanging process.
一个被影响的进程调用堆栈的top,获得使用的pstack:
0: c0000000003e2ff0 : pw_wait() + 0x30 (/usr/lib/hpux64/libc.so.1)
1: 4000000002e98a20 : pw_wait() + 0x80
(/oracle/DwhProd/orabin/oradb/product/10.2.0/bin/oracle)
2: 4000000002e492f0 : sskgpwwait() + 0x170 (/oracle/DwhProd/orabin/oradb/pr
oduct/10.2.0/bin/oracle)
3: 4000000002e3af80 : skgpwwait() + 0xa0 (/oracle/DwhP
rod/orabin/oradb/product/10.2.0/bin/oracle)
4: 4000000002d6ffd0 : ksliwat() + 0x670
(/oracle/DwhProd/orabin/oradb/product/10.2.0/bin/oracle)
5: 4000000002d4a1b0 : kslwaitns_timed() + 0x70
(/oracle/DwhProd/orabin/oradb/product/10.2.0/bin/oracle)
6: 4000000002d4b9b0 : kskthbwt() + 0x190 (/oracle/DwhProd/orabin/oradb/p
roduct/10.2.0/bin/oracle)
7: 4000000002e35220 : kslwait() + 0xe0 (/oracle/DwhPr
od/orabin/oradb/product/10.2.0/bin/oracle)
...
这些下面,依赖于特定的等待事件,一些调用堆栈的调用将有所不同。
Tusc系统的调用跟踪者工具的输出类似如下所示:
( Attached to process 6144 ("ora_j032_SATAVA02") [64-bit] )
15:30:27 [6144]{631499} #1 pw_wait(0x9ffffffffffe1700) ... [sleeping]
User time: 0.00
Interrupt time: 0.00
Elapsed time: 66.3
更改:
HP 11.31以下的补丁包可能需要最近适用的
Mar 2008: FEATURE11i,B.11.31.0803.318b
注意:这些引起我们注意的问题也可能发生在HP-UX11.23系统上。
原因:
在pw_wait() O/S系统调用中,这个问题是一个过失。
在HP-UX11.31上,这个问题是由HP-UX调度进程补丁PHKL_37456的问题引起的。
PHKL_37456:调度进程累积的补丁
另外的信息或许可以在HP 改变请求QXCR1000811756中寻找。
请注意等待事件,如上所示‘cursor: pin S wait on X' and 'kksfbc child completion’,这能出现在一些其他合法的原因之上。所以,只存在这些等待不能说明这个问题描述的,在那些条项中就已经遇到过。当调查这个问题的事实时,你需要验证其他的详细的症状在这里描述的。
这个问题也会在HP-UX11.23中发生。我们没有在这个时候对特定的PHKL补丁级别的信息影响到它,只是开始修补PHKL_37809。
解决:
有一些选项可用于解决这个问题:
解决方法:oraclebug setospid+unlimit释放挂起的进程。
1. 检查unix中挂起进程的id。
2. 在之上用oraclebug,如下:(unlimit命令足够停止挂起)
SQL> oradebug setospid <unix process id>
SQL> oradebug unlimit
3. 作为选择,如果有一些挂起的进程在‘cursor: pin S wait on X’上,或者时间非常短,systemstate跟踪dump(最小级别1将最小化跟踪数量写入dump文件)将以最快的途径找到挂起的进程并且唤醒他们。
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug dump systemstate 1
解决方法:在11.31上安装PHKL_38397或以后等效。
解决方法:在11.23上安装PHKL_37809或以后等效。
注意:这些名字以PHKL_开头的包是HP-UX的补丁包。由于这些包经常修改和升级,所以请验证HP-UX支持的最近的可适用的补丁数字。