求助:遭遇 library cache lock,但是没有找到阻塞者
本帖最后由 不了峰 于 2014-2-27 15:56 编辑环境:os: RHEL5.6 64位, Oracle RAC 10.2.0.5 64bit (两节点)
遇到的问题:
对一张分区表进行增加分区时,遇到library cache lock ,一直hang住,无法执行成功
sql语句大致如下:ALTER TABLE CDMA_CDL_ZTE_SUM_ECIORPT_T ADD PARTITION Q20140221 VALUES LESS THAN ( '2014-02-22')...
(
subpartition Q20140221_593 values ('593' ) tablespace CDL_DATA_BIG,
....查看这个会话 v$session_wait发现他的等待事件是library cache lock .
这时desc CDMA_CDL_ZTE_SUM_ECIORPT_T 这张表,也是遇到library cache lock ,并也一直hang住。
(这个的信息可能会干扰分析: 这个表有1千多个分区,每个分区又有子分区,所以总共有7千多个子分区)
于是把这里面所有的library cache lock 的会话kill后,desc CDMA_CDL_ZTE_SUM_ECIORPT_T可以成功,但是增加分区还是无法成功
关闭其中一个节点上的实例(实例2),这时RAC只有一个实例在运行,再执行增加表分区还是无法成功。
于是对该实例做了一个system_dump ,参考了ID 122793.1,采用第一种方法做了systemdump
$sqlplus '/ as sysdba'
oradebug setmypid
oradebug unlimit
oradebug dump systemstate 266
oradebug tracefile_name
得到trace文件
cdrdb1_ora_20695.trc 见附近
注:其中PROCESS 89 这个会话就是上面执行增加表分区sql 的会话~
想问的是,这个会话在等待哪个会话 ?
用ass1038.awk得到的结果如下:
88: waiting for 'SQL*Net message from client'
89: waiting for 'library cache lock'
Cmd: Create Table
...
92: last wait for 'ksdxexeotherwait'
..
191:last wait for 'SQL*Net message from client'
Cmd: Select
Blockers
~~~~~~~~
Resource Holder State
LOCK: handle=301bbe080 ??? Blocker
No blockers seen.
Object Names
~~~~~~~~~~~~
LOCK: handle=301bbe080
Summary of Wait Events Seen (count>10)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
No wait events seen more than 10 times
用ass109.awk得到的结果如下:
..省略上面相同
89: waiting for 'library cache lock'
Cmd: Create Table
191:last wait for 'SQL*Net message from client'
Cmd: Select
Blockers
~~~~~~~~
Above is a list of all the processes. If they are waiting for a resource
then it will be given in square brackets. Below is a summary of the
waited upon resources, together with the holder of that resource.
Notes:
~~~~~
o A process id of '???' implies that the holder was not found in the
systemstate.
Resource Holder State
LOCK: handle=301bbe080 ??? Blocker
Object Names
~~~~~~~~~~~~
LOCK: handle=301bbe080 TABL:PLMS.CDMA_CDL_ZTE_SUM_ECIORPT_T
感觉通过systemdump也没有找到哪个会话是阻塞者~~
我后面是解决是,启动刚才关闭的实例2,再半闭实例1后,
增加表分区 执行成功
再打开实例1后,即现在RAC两节点都在运行
增加表分区,执行成功
想问的是,是不是真的就没有找到谁是阴塞者,难道是process 191这个会话??
谢谢!
注:ass109.zip是ass109.log输出,ass1038.zip是ass1038.log
数据库两节点 一定在10-10-2012 19:18:08 这个时间点,都重启过
关键词
RAC + 10.2.0.5 + library cache lock+ 找不到 blocker
LCK wait for ksxr poll remote instances Maclean Liu(刘相兵 发表于 2014-2-27 22:26 static/image/common/back.gif
关键词
RAC + 10.2.0.5 + library cache lock+ 找不到 blocker
LCK wait for ksxr poll remote instances
当时我把另一个实例关闭了~还出现这个
1、blocker可能在其他节点
2、 如果下次仍发生可以做 systemstate dump 267
3、同时收集 http://www.askmaclean.com/archives/script-to-collect-rac-diagnostic-information-racdiag-sql.html
4、 这个问题 也可能是PMON没有回收dead process所致 Maclean Liu(刘相兵 发表于 2014-2-28 13:30 static/image/common/back.gif
1、blocker可能在其他节点
2、 如果下次仍发生可以做 systemstate dump 267
3、同时收集 http://www.askm ...
ok,谢谢 ~
页:
[1]