不了峰 发表于 2014-2-27 15:53:45

求助:遭遇 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






不了峰 发表于 2014-2-27 17:02:14

数据库两节点 一定在10-10-2012 19:18:08 这个时间点,都重启过

Maclean Liu(刘相兵 发表于 2014-2-27 22:26:20

关键词
RAC + 10.2.0.5 + library cache lock+ 找不到 blocker

LCK wait for ksxr poll remote instances

不了峰 发表于 2014-2-28 08:40:20

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

当时我把另一个实例关闭了~还出现这个

Maclean Liu(刘相兵 发表于 2014-2-28 13:30:04


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所致

不了峰 发表于 2014-2-28 14:03:34

Maclean Liu(刘相兵 发表于 2014-2-28 13:30 static/image/common/back.gif
1、blocker可能在其他节点
2、 如果下次仍发生可以做 systemstate dump 267
3、同时收集 http://www.askm ...

ok,谢谢   ~
页: [1]
查看完整版本: 求助:遭遇 library cache lock,但是没有找到阻塞者