sql >> Databáze >  >> RDS >> Oracle

GWFG v Oracle RAC

V mé 3uzlové databázi Oracle RAC (verze 11.2.0.4) je hlášeno zablokování, jak je vidět v protokolu výstrah. Vzhledem k tomu, že se jedná o databázi Oracle RAC, jsou zdroje spravovány globálně a zapojuje se i Lock Manager Daemon (LMD). Zpráva v protokolu výstrah mě upozornila na trasovací soubor LMD, který obsahoval tento graf globálního čekání (GWFG).

*** 2015-02-27 04:16:33.183
Submitting asynchronized dump request [1c]. summary=[ges process stack dump (kjdglblkrdm1)].
Global blockers dump end:-----------------------------------
Global Wait-For-Graph(WFG) at ddTS[0.394d] :
BLOCKED 0x551b2c698 2 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[6B000-0004-0000022D] inst 4
BLOCKER 0x5513ed318 2 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[B6000-0006-00000099] inst 6
BLOCKED 0x5513ed318 4 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[B6000-0006-00000099] inst 6
BLOCKER 0x5513ef5b8 4 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[66000-0005-00000FDB] inst 5
BLOCKED 0x5513ef5b8 4 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[66000-0005-00000FDB] inst 5
BLOCKER 0x551b2c698 4 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[6B000-0004-0000022D] inst 4
* Cancel deadlock victim lockp 0x551b2c698

Poznámka: Skutečné SQL a několik dalších podrobností mohlo být změněno, aby byly chráněny nevinné.

Takže tam mám 3 sezení zapojená do uváznutí. Po jednom na instanci s ID 4, 5 a 6.

Díval jsem se na trasovací soubor vygenerovaný na instanci id 4. Nad GWFG byla tato informace:

user session for deadlock lock 0x551b2c698
 sid: 1727 ser: 539 audsid: 996549224 user: 13944/MP_SYS
 flags: (0x41) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
 flags2: (0x40009) -/-/INC
 pid: 107 O/S info: user: oracle, term: UNKNOWN, ospid: 11229
 image: [email protected]
 client details:
 O/S info: user: web-svc, term: web-server1, ospid: 4276:864
 machine: DOMAIN\web-server1 program: iis.exe
 client info: user: WEBSERVICE
 current SQL:
 INSERT INTO MP_SYS.T2( column_list) SELECT column_list FROM MP_SYS.T1 WHERE MP_SYS.T1.P_ID=:B1
DUMP LOCAL BLOCKER: initiate state dump for DEADLOCK
 possible owner[107.11229] on resource TM-0011FFA3-00000000

Vidím tedy informace o stroji, programu a prováděném příkazu SQL. Červený identifikátor uživatelské relace výše odpovídá hodnotě id v GWFG. Podívejme se znovu na první dva řádky GFWG.

BLOCKED 0x551b2c698 2 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[6B000-0004-0000022D] inst 4
BLOCKER 0x5513ed318 2 wq 2 cvtops x1 TM 0x11ffa3.0x0(ext 0x0,0x0)[B6000-0006-00000099] inst 6

Příkaz SQL a podrobnosti relace tedy odpovídají tomuto prvnímu řádku. Tato relace je blokována na inst 4. Blokátor je na inst6 a je identifikován jako 0x5513ed318 . kdo je to? V tomto GWFG nejsou žádné další podrobnosti, které by nám pomohly s BLOCKEREM.

Chcete-li se dozvědět více o blockeru, šel jsem na inst 6 a udělal jsem toto:

cd /u01/app/oracle/diag/rdbms/admin/orcl/orcl6/trace
grep 0x5513ed318 *

Tak jsem právě provedl grep na hodnotě identifikující relaci a dostal jsem trasovací soubor LMD. Když se podívám do trasovacího souboru LMD na druhé instanci, zjistím podrobnosti o blokovací relaci.

user session for deadlock lock 0x5513ed318
 sid: 1206 ser: 2673 audsid: 996459926 user: 13944/MP_SYS
 flags: (0x41) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
 flags2: (0x40009) -/-/INC
 pid: 182 O/S info: user: oracle, term: UNKNOWN, ospid: 7049
 image: [email protected]
 client details:
 O/S info: user: web-svc, term: web-server2, ospid: 4276:864
 machine: DOMAIN\web-server2 program: iis.exe
 client info: user: WEBSERVICE
 current SQL:
 DELETE FROM MP_SYS.T1 WHERE P_ID = :B1
DUMP LOCAL BLOCKER: initiate state dump for DEADLOCK
 possible owner[182.7049] on resource TM-0011FFA3-00000000

Vidím, že blokovaná relace vydávala příkaz INSERT na stole a blokátor u stejné tabulky vydával příkaz DELETE.

Je zde zahrnuta další relace, ale v tomto okamžiku je základní získat podrobnosti o relaci pomocí stejných kroků výše.

Doufejme, že tento příspěvek na blogu ukázal, jak používat GWFG k diagnostice příkazů SQL a objektu zapojeného do globálního uváznutí. Znám přesné příkazy SQL zapojené do uváznutí a v širším smyslu i zahrnuté objekty. Řešení problému se neliší od řešení zablokování v databázích s jednou instancí.

Další informace o Oracle RAC Global Enqueue Services (GES) najdete v kapitole 2 mé knihy Oracle RAC Performance Tuning.


  1. Jak zakázat spouštění v Oracle SQL Developer?

  2. Úroveň izolace zavázaná ke čtení

  3. Agregační funkce v MySQL – seznam (jako LISTAGG v Oracle)

  4. Funkce PL/pgSQL:Jak vrátit normální tabulku s více sloupci pomocí příkazu execute