• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 徹底搞清楚library cache lock的成因和解決方法(二)

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    上一個例子中我們主要借助于X$KGLLK基表和event systemstate解決問題,那么如果你不了解X$KGLLK基表,或者忘記了如何使用它,那也不要緊張,這里再介紹一種常規的方法。 從system state 的轉儲信息中,我們已經注意到PROCESS 28當前正在等待@#library cache

    上一個例子中我們主要借助于X$KGLLK基表和event systemstate解決問題,那么如果你不了解X$KGLLK基表,或者忘記了如何使用它,那也不要緊張,這里再介紹一種常規的方法。

    從system state 的轉儲信息中,我們已經注意到PROCESS 28當前正在等待@#library cache lock@#。
    @#handle address@#表示的就是正持有 PROCESS 28 進程所等待的library cache中的地址。

    現在我們繼續在跟蹤文件中查找包含 @#handle=c000000122e2a6d8@# 字符串的ORACLE PROCESS,也就是查找blocking session的信息,發現信息如下:

    PROCESS 26: ----------------阻塞其他會話的Oracle進程,這里PROCESS 26對應了V$PROCESS中的PID的值
      ----------------------------------------
      SO: c000000109c831e0, type: 2, owner: 0000000000000000, flag: INIT/-/-/0x00
      (process) Oracle pid=26, calls cur/top: c00000010b2774d0/c00000010b2774d0, flag: (0) -
                int error: 0, call error: 0, sess error: 0, txn error 0
      (post info) last post received: 17 24 6
                  last post received-location: ksusig
                  last process to post me: c000000109c840f8 25 0
                  last post sent: 751404 0 15
                  last post sent-location: ksasnd
                  last process posted by me: c000000109c836e8 1 6
        (latch info) wait_event=0 bits=0
        Process Group: DEFAULT, pseudo proc: c000000109eefda0
        O/S info: user: ora9i, term: UNKNOWN, ospid: 20552
        OSD pid info: Unix process pid: 20552, image: oracle@cs_dc02 (TNS V1-V3)
        ----------------------------------------
        SO: c0000001180b9510, type: 8, owner: c000000109c831e0, flag: INIT/-/-/0x00
        (FOB) flags=2 fib ptr=162e1b48 incno=0 pending i/o cnt=0
        ----------------------------------------
        SO: c0000001180b9458, type: 8, owner: c000000109c831e0, flag: INIT/-/-/0x00
        (FOB) flags=2 fib ptr=162deb18 incno=0 pending i/o cnt=0
        ----------------------------------------
        SO: c0000001180b8230, type: 8, owner: c000000109c831e0, flag: INIT/-/-/0x00
        (FOB) flags=2 fib ptr=162de848 incno=0 pending i/o cnt=0
        ----------------------------------------
        SO: c0000001180b7b00, type: 8, owner: c000000109c831e0, flag: INIT/-/-/0x00
        (FOB) flags=2 fib ptr=162de578 incno=0 pending i/o cnt=0
        ----------------------------------------
        SO: c000000108c99e28, type: 4, owner: c000000109c831e0, flag: INIT/-/-/0x00
    c000000108c99e28 對應的就是V$SESSION 中的SADDR的值,通過這個信息就可以找到blocking session的SID等信息
        (session) trans: c0000001169403c0, creator: c000000109c831e0, flag: (100041) USR/- BSY/-/-/-/-/-
                  DID: 0002-001A-0000007D, short-term DID: 0000-0000-00000000
                  txn branch: c00000011b825e18
                  oct: 0, prv: 0, sql: 800003fb0005f7b0, psql: c00000011fbe3f98, user: 50/PUBUSER
        O/S info: user: report16, term: , ospid: 20550, machine: cs_dc02
                  program: sqlplus@cs_dc02 (TNS V1-V3)
        application name: SQL*Plus, hash value=3669949024
        waiting for @#SQL*Net message from dblink@# blocking sess=0x0 seq=3319 wait_time=0
                    driver id=28444553, #bytes=1, =0
                    -------------------
    這里,

     #bytes 表示個server process通過database link發送給另一個server process的字節數(bytes)
    driver id 是一個10進制數,我們需要把它轉化為16進制數,然后就會發現它對應于我們通過event 10046中的相應的信息:
    *** 2005-01-10 11:44:48.200
    WAIT #1: nam=@#SQL*Net message from dblink@# ela= 104397696 p1=675562835 p2=1 p3=0
    WAIT #1: nam=@#SQL*Net message to dblink@# ela= 4 p1=675562835 p2=1 p3=0

    SQL> select to_char(675562835,@#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@#) from dual;

    TO_CHAR(675562835,@#XXXXXXXXXXXXXX
    ---------------------------------
                             28444553

    SQL>
                   
        temporary object counter: 0
          ----------------------------------------
          SO: c00000011a4496b0, type: 51, owner: c000000108c99e28, flag: INIT/-/-/0x00
          LIBRARY OBJECT LOCK: lock=c00000011a4496b0 handle=c00000012029f968 mode=N
          call pin=0000000000000000 session pin=c00000011a44ad70
          htl=c00000011a449720[c00000011a4baa78,c00000011a4baa78] htb=c00000011a4baa78
          user=c000000108c99e28 session=c000000108c99e28 count=1 flags=[00] savepoint=173
          LIBRARY OBJECT HANDLE: handle=c00000012029f968
          namespace=CRSR flags=RON/KGHP/PN0/[10010000]
          kkkk-dddd-llll=0000-0041-0041 lock=N pin=0 latch#=3
          lwt=c00000012029f998[c00000012029f998,c00000012029f998] ltm=c00000012029f9a8[c00000012029f9a8,c00000012029f9a8]
          pwt=c00000012029f9c8[c00000012029f9c8,c00000012029f9c8] ptm=c00000012029fa58[c00000012029fa58,c00000012029fa58]
          ref=c00000012029f978[c0000001202a0068, c0000001202a0068] lnd=c00000012029fa70[c00000012029fa70,c00000012029fa70]
            LIBRARY OBJECT: object=c00000012029f5c8
            type=CRSR flags=EXS[0001] pflags= [00] status=VALD load=0
            DEPENDENCIES: count=1 size=16
            AUTHORIZATIONS: count=1 size=16 minimum entrysize=16
            ACCESSES: count=1 size=16
            DATA BLOCKS:
            data#     heap  pointer status pins change
            ----- -------- -------- ------ ---- ------
                0 c00000012029f8a8 c00000012029f288 I/P/A     0 NONE 
                6 c00000012029f6e8 c00000012029e7c8 I/-/A     0 NONE 
          ----------------------------------------

    。。。 。。。


              ----------------------------------------
              SO: c00000011a44a150, type: 51, owner: c0000001169403c0, flag: INIT/-/-/0x00
          ////////////// X$KGLLK.KGLLKADR 對應于SO(SO: c00000011a44a150 //////////////
          ////////////// X$KGLLK.KGLLKUSE 和 x$kgllk.KGLLKSES 對應于owner的值(owner: c0000001169403c0)
             
              LIBRARY OBJECT LOCK: lock=c00000011a44a150 handle=c000000122e2a6d8 mode=X
          ////////////// X$KGLLK.KGLLKADR 對應于SO 和 lock的值(SO: c00000011a44a150,lock=c00000011a44a150) //////////////
          ////////////// X$KGLLK.KGLLKHDL 對應于handle的值(handle=c000000122e2a6d8) ////////////////
             
              call pin=0000000000000000 session pin=0000000000000000
          ////////////// X$KGLLK.KGLLKPNS 對應于session pin的值(session pin=0000000000000000) //////////////
             
              htl=c00000011a44a1c0[c00000011a4bb328,c00000011a4bb328] htb=c00000011a4bb328
              user=c000000108c99e28 session=c000000108c99e28 count=1 flags=[00] savepoint=179
             user和session的值分別對應著x$kgllk.KGLLKUSE 和 x$kgllk.KGLLKSES,也對應于V$SESSION中阻塞其他會話的SADDR
          ////////////// X$KGLLK.KGLLKSPN對應于savepoint的值(savepoint=179) //////////////
             
              LIBRARY OBJECT HANDLE: handle=c000000122e2a6d8
              name=PUBUSER.CSNOZ629926699966
              hash=eddf82b5 timestamp=01-08-2005 13:00:18 previous=NULL
              namespace=TABL/PRCD/TYPE flags=KGHP/TIM/PTM/SML/[02000000]
              kkkk-dddd-llll=0000-0709-0001 lock=X pin=X latch#=3
              lwt=c000000122e2a708[c00000011a449e40,c00000011a449e40] ltm=c000000122e2a718[c000000122e2a718,c000000122e2a718]
              pwt=c000000122e2a738[c000000122e2a738,c000000122e2a738] ptm=c000000122e2a7c8[c000000122e2a7c8,c000000122e2a7c8]
              ref=c000000122e2a6e8[c000000122e2a6e8, c000000122e2a6e8] lnd=c000000122e2a7e0[c000000122e2a7e0,c000000122e2a7e0]
                LOCK INSTANCE LOCK: id=LBcafc8485d0949f81
                PIN INSTANCE LOCK: id=NBcafc8485d0949f81 mode=X release=F flags=[00]
                LIBRARY OBJECT: object=c000000122e12f70
                type=TABL flags=EXS/LOC/CRT[0015] pflags= [00] status=VALD load=0
                DATA BLOCKS:
                data#     heap  pointer status pins change
                ----- -------- -------- ------ ---- ------
                    0 c000000122e2a618 c000000122e13118 I/P/A     0 INSERT
                    3 c000000122e13178        0 -/P/-     1 NONE 
                    8 c000000122e12c30 c000000122febdb8 I/P/A     1 UPDATE
                    9 c000000122e13090        0 -/P/-     1 NONE 
                   10 c000000122e12ce0 c000000122acbc70 I/P/A     1 UPDATE
          ----------------------------------------


    。。。 。。。


    根據上述兩個ORACLE進程號(ORACLE PID),我們可以找到他們的會話信息和操作系統進程信息
    SQL> select spid,pid,addr from v$process where pid in (26,28);

    SPID                PID ADDR
    ------------ ---------- ----------------
    20552                26 C000000109C831E0 ----------- 阻塞其他會話的Oracle進程
    22580                28 C000000109C83BF0 ----------- 被阻塞的Oracle進程

    SQL>

    我們來進一步證實一下上述信息:

    SQL>col username for a20
    SQL> col osuser for a20
    SQL> col machine for a20
    SQL> l
      1   select sid,serial#,username,osuser,machine,to_char(logon_time,@#yyyy/mm/dd hh24:mi:ss@#) LogonTime
      2*  from v$session where paddr in ( select addr from v$process where spid =@#&spid@#)
    SQL> /
    Enter value for spid: 20552 ----------- 阻塞其他會話的Oracle進程

    old   2:  from v$session where paddr in ( select addr from v$process where spid =@#&spid@#)
    new   2:  from v$session where paddr in ( select addr from v$process where spid =@#20552@#)

           SID    SERIAL# USERNAME             OSUSER               MACHINE              LOGONTIME
    ---------- ---------- -------------------- -------------------- -------------------- -------------------
            37       2707 PUBUSER              report16             cs_dc02              2005/01/08 13:00:17

    SQL> /
    Enter value for spid: 22580 ----------- 被阻塞的Oracle進程

    old   2:  from v$session where paddr in ( select addr from v$process where spid =@#&spid@#)
    new   2:  from v$session where paddr in ( select addr from v$process where spid =@#22580@#)

           SID    SERIAL# USERNAME             OSUSER               MACHINE              LOGONTIME
    ---------- ---------- -------------------- -------------------- -------------------- -------------------
            30      24167 PUBUSER              ora9i                cs_dc02              2005/01/10 10:20:31


    SQL> select sid,saddr,paddr,username,status,OSUSER from v$session where sid in (37,30);

           SID SADDR            PADDR            USERNAME             STATUS   OSUSER
    ---------- ---------------- ---------------- -------------------- -------- --------------------
            30 C000000109F02C68 C000000109C83BF0 PUBUSER              ACTIVE   ora9i
            37 C000000108C99E28 C000000109C831E0 PUBUSER              ACTIVE   report16

    SQL>
    現在,問題已經水落石出了,解決方法和方法1中的一樣(在操作系統中直接kill掉相應的操作系統進程)。

    當然,處于研究的目的,我們可以進一步了解一下上述兩個會話(SID 30 和 SID 37)所有已經持有鎖的相關信息:
    SQL> set linesize 150
    SQL> set pages 10000
    SQL> select * from v$lock where sid in (37,30);

    ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
    ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    C0000001169403C0 C000000116940538         37 TX     917507      26579          6          0     180478          2
    C00000011676DAE0 C00000011676DB08         37 TM         18          0          3          0     180478          2
    C00000010B30C4E8 C00000010B30C508         37 XR          4          0          2          0     180369          2
    C00000010B30C460 C00000010B30C480         37 DX         21          0          1          0         68          0

    SQL>
    不難看出,會話37阻塞了其他會話

    現在,我們再進一步看看會話37當前在哪些對象上加了鎖:
    SQL> select object_name,object_id from dba_objects where object_id in (@#917507@#,@#18@#,@#4@#,@#21@#) order by object_id;

    OBJECT_NAME                     OBJECT_ID
    ------------------------------ ----------
    TAB$                                    4
    OBJ$                                   18
    COL$                                   21

    SQL> /

    OBJECT_NAME                     OBJECT_ID
    ------------------------------ ----------
    TAB$                                    4
    OBJ$                                   18
    COL$                                   21

    SQL>


    接下來,再著重看看SID 為37的會話在library cache中請求和持有對象鎖的詳細信息:
    SQL> col KGLNAOBJ for a30
    SQL> col USER_NAME for a10
    SQL> l
      1  select INST_ID,USER_NAME,KGLNAOBJ,KGLLKSNM,KGLLKUSE,KGLLKSES,KGLLKMOD,KGLLKREQ
      2* from x$kgllk where KGLLKSNM  = 37
    SQL> /

       INST_ID USER_NAME  KGLNAOBJ                         KGLLKSNM KGLLKUSE         KGLLKSES           KGLLKMOD   KGLLKREQ
    ---------- ---------- ------------------------------ ---------- ---------------- ---------------- ---------- ----------
             2 PUBUSER    DBMS_OUTPUT                            37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    DBMS_OUTPUT                            37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    DBMS_STANDARD                          37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    PUBUSER                                37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    SELECT MINOR_VERSION   FROM SY         37 C000000108C99E28 C000000108C99E28          1          0
                          S.CDC_SYSTEM$

             2 PUBUSER    SELECT MINOR_VERSION   FROM SY         37 C000000108C99E28 C000000108C99E28          1          0
                          S.CDC_SYSTEM$

             2 PUBUSER    DBMS_CDC_PUBLISH                       37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    DBMS_CDC_PUBLISH                       37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    CSNOZ629926699966                      37 C000000108C99E28 C000000108C99E28          3          0
             2 PUBUSER    DBMS_APPLICATION_INFO                  37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    DBMS_APPLICATION_INFO                  37 C000000108C99E28 C000000108C99E28          1          0
             2 PUBUSER    DATABASE                               37 C000000108C99E28 C000000108C99E28          1          0

    12 rows selected.

    SQL>

    再看看SID為30的會話在library cache中請求和持有對象鎖的詳細信息:
    SQL> select INST_ID,USER_NAME,KGLNAOBJ,KGLLKSNM,KGLLKUSE,KGLLKSES,KGLLKMOD,KGLLKREQ
      2  from x$kgllk where KGLLKSNM  = 30                                             
      3  /

       INST_ID USER_NAME  KGLNAOBJ                         KGLLKSNM KGLLKUSE         KGLLKSES           KGLLKMOD   KGLLKREQ
    ---------- ---------- ------------------------------ ---------- ---------------- ---------------- ---------- ----------
             2 PUBUSER    PUBUSER                                30 C000000109F02C68 C000000109F02C68          1          0
             2 PUBUSER    CSNOZ629926699966                      30 C000000109F02C68 C000000109F02C68          0          2
             2 PUBUSER    DBMS_APPLICATION_INFO                  30 C000000109F02C68 C000000109F02C68          1          0
             2 PUBUSER    DBMS_APPLICATION_INFO                  30 C000000109F02C68 C000000109F02C68          1          0
             2 PUBUSER    DATABASE                               30 C000000109F02C68 C000000109F02C68          1          0

    SQL>  
    KGLNAOBJ 列包含了在librarky cache中的對象上執行命令的語句的前80個字符,其實從這里我們也可以大大縮小范圍了
    KGLLKSES 對應于V$SESSION 中的 SADDR列的值
    KGLLKSNM 對應于V$SESSION 中的SID(Session ID)
    KGLLKHDL 的值與方法1中跟蹤文件中的@#handle address@#的值對應
    KGLLKPNS 的值對應于方法1中跟蹤文件中的@#Ssession pin@#的值

    SQL> set linesize 2000
    SQL> l
      1  select INST_ID,USER_NAME,KGLNAOBJ,KGLLKSNM,KGLLKUSE,KGLLKSES,KGLLKMOD,KGLLKREQ,KGLLKPNS,KGLLKHDL
      2* from x$kgllk where KGLLKSNM  in (30,37) order by KGLLKSNM,KGLNAOBJ
    SQL> /

       INST_ID USER_NAME                      KGLNAOBJ                                                       KGLLKSNM KGLLKUSE         KGLLKSES       KGLLKMOD   KGLLKREQ KGLLKPNS         KGLLKHDL
    ---------- ------------------------------ ------------------------------------------------------------ ---------- ---------------- ---------------- ---------- ---------- ---------------- ----------------
             2 PUBUSER                        DATABASE                                                             30 C000000109F02C68 C000000109F02C68      1          0 00               C000000119F8EC58
             2 PUBUSER                        DBMS_APPLICATION_INFO                                                30 C000000109F02C68 C000000109F02C68      1          0 00               C00000011CCDDA48
             2 PUBUSER                        DBMS_APPLICATION_INFO                                                30 C000000109F02C68 C000000109F02C68      1          0 00               C00000011CCD81B8
             2 PUBUSER                        PUBUSER                                                              30 C000000109F02C68 C000000109F02C68      1          0 00               C00000011CBFDAA8
             2 PUBUSER                        CSNOZ629926699966                                                    30 C000000109F02C68 C000000109F02C68      0          2 00               C000000122E2A6D8
             2 PUBUSER                        DATABASE                                                             37 C000000108C99E28 C000000108C99E28      1          0 00               C000000119F8EC58
             2 PUBUSER                        DBMS_APPLICATION_INFO                                                37 C000000108C99E28 C000000108C99E28      1          0 00               C00000011CCDDA48
             2 PUBUSER                        DBMS_APPLICATION_INFO                                                37 C000000108C99E28 C000000108C99E28      1          0 00               C00000011CCD81B8
             2 PUBUSER                        DBMS_CDC_PUBLISH                                                     37 C000000108C99E28 C000000108C99E28      1          0 00               C00000011FEA4918
             2 PUBUSER                        DBMS_CDC_PUBLISH                                                     37 C000000108C99E28 C000000108C99E28      1          0 00               C0000001202A4988
             2 PUBUSER                        DBMS_OUTPUT                                                          37 C000000108C99E28 C000000108C99E28      1          0 00               C00000011CCB48B0
             2 PUBUSER                        DBMS_OUTPUT                                                          37 C000000108C99E28 C000000108C99E28      1          0 00               C00000011FFF5098
             2 PUBUSER                        DBMS_STANDARD                                                        37 C000000108C99E28 C000000108C99E28      1          0 00               C00000011CCF0ED8
             2 PUBUSER                        PUBUSER                                                              37 C000000108C99E28 C000000108C99E28      1          0 00               C00000011CBFDAA8
             2 PUBUSER                        SELECT MINOR_VERSION   FROM SYS.CDC_SYSTEM$                          37 C000000108C99E28 C000000108C99E28      1          0 C00000011A44AD70 C00000012029F968
             2 PUBUSER                        SELECT MINOR_VERSION   FROM SYS.CDC_SYSTEM$                          37 C000000108C99E28 C000000108C99E28      1          0 00               C0000001202A0228
             2 PUBUSER                        CSNOZ629926699966                                                    37 C000000108C99E28 C000000108C99E28      3          0 00               C000000122E2A6D8

    17 rows selected.

    SQL>

     

     

     

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>