Gblog

おもにTips

Wait-For-Graph の見方(RAC)

久しぶりに Wait-for-graph(WFG) を見る用事があったのですが、すっかり忘れていました。
RAC の場合、デッドロック時の待機状況をしめす WFG は LMDプロセスが出力してくれます。基本、全ノードの LMD のトレースを確認するのがよいです。

Global Wait-For-Graph(WFG) at ddTS[0.9] :
BLOCKED 0xc0000000ef59db70 5 wq 2 cvtops x1  TX 0x1001b.0x40372(ext 0x2,0x0)[2002-0022-0003CECA] inst 3
BLOCKER 0xc0000000ef47faf8 5 wq 1 cvtops x28 TX 0x1001b.0x40372(ext 0x2,0x0)[3002-0028-00013E57] inst 2
BLOCKED 0xc0000000ef59f160 5 wq 2 cvtops x1  TX 0x6001d.0x3f91a(ext 0x2,0x0)[3002-0028-00013E57] inst 2
BLOCKER 0xc0000000ef59ef90 5 wq 1 cvtops x28 TX 0x6001d.0x3f91a(ext 0x2,0x0)[3002-0026-000152C8] inst 2
BLOCKED 0xc0000000ef59e0f8 5 wq 2 cvtops x1  TX 0x1e0008.0x26f4(ext 0xf,0x0)[3002-0026-000152C8] inst 2
BLOCKER 0xc0000000ef4ae510 5 wq 1 cvtops x28 TX 0x1e0008.0x26f4(ext 0xf,0x0)[2002-0022-0003CECA] inst 3
^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^
     *1                 *2 *3  *4         *5                              *6                  *7     *8

*1 : BLOCKしている(BLOCKER) or BLOCKされている(BLOCKED)
*2 : lock pointer ?
*3 : lock の mode.    null(0), SS(1), SX(2), S(3), SSX(4), X(5)
*4 : 獲得済みか、獲得待ちか。  granted queue(1), convert queue(2)
*5 : ???
*6 : enqueue
*7 : ???
*8 : 該当プロセスのインスタンス

 

よくわからないことも多いです。

*2 の情報から実行されているSQLなど確認することができます。

user session for deadlock lock 0xc0000000ef59db70
  sid: xx ser: xxxxx audsid: 99999 user: 99/TEST
    flags: (0x99) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
    flags2: (0x99999) -/-/INC
  pid: 99 O/S info: user: test, term: UNKNOWN, ospid: 99999
    image: oracle@test
  client details:
    O/S info: user: test , term: pts/0, ospid: 99999
    machine: test program: sqlplus@test (TNS V1-V3)
    application name: SQL*Plus, hash value=9999999999
  current SQL:
  update tab3 set c1=1000

 
"user session for deadlock lock" がWFGのトレースと同じように、LMD のトレースに出力されます。