Oracle
 sql >> база данни >  >> RDS >> Oracle

GWFG в Oracle RAC

Имам съобщение за блокиране в моята база данни Oracle RAC с 3 възела (версия 11.2.0.4), както може да се види в дневника на предупрежденията. Тъй като това е база данни на Oracle RAC, ресурсите се управляват глобално и демонът на Lock Manager (LMD) се включва. Съобщението в дневника за предупреждения ме насочи към файл за проследяване на LMD, който съдържа тази глобална графика за чакане (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

Забележка: Реалният SQL и няколко други подробности може да са променени, за да се защитят невинните.

Така че имам 3 сесии, включени в безизходица. По един за идентификатор на екземпляр 4, 5 и 6.

Гледах файла за проследяване, генериран на идентификатор на екземпляр 4. Над GWFG беше тази информация:

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

Така че мога да видя информация за машината, програмата и SQL израза, който се изпълнява. Идентификаторът на потребителската сесия в червено по-горе съответства на стойността на id в GWFG. Нека отново да разгледаме първите два реда на 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

Така че SQL изразът и подробностите за сесията съответстват на този първи ред. Тази сесия е блокирана на inst 4. Блокерът е на inst6 и е идентифициран като 0x5513ed318 . Е, кой е това? В този GWFG няма други подробности, които да ни помогнат с БЛОКЕРА.

За да науча повече за блокера, отидох на inst 6 и направих това:

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

Така че току-що направих grep върху стойността за идентифициране на сесията и ми беше даден файл за проследяване на LMD. Разглеждането на този файл за проследяване на LMD на другия екземпляр ми дава подробности за блокиращата сесия.

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

Виждам, че блокираната сесия е издавала оператор INSERT на таблица, а блокерът е издавал DELETE на същата таблица.

Има друга сесия, но в този момент е елементарно да получите подробности за сесията, като използвате същите стъпки по-горе.

Надяваме се, че този запис в блога е показал как да се използва GWFG за диагностициране на SQL изразите и обекта, участващ в глобалната безизходица. Знам точните SQL оператори, участващи в безизходицата, и в допълнение, обектите, които участват. Разрешаването на проблема не се различава от разрешаването на блокиране в бази данни с един екземпляр.

За повече информация относно Oracle RAC Global Enqueue Services (GES), прочетете глава 2 от моята книга за настройка на производителността на Oracle RAC.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 12c VARCHAR2(32767)

  2. Методът ExecuteBatch връща масив със стойност -2 в java

  3. Oracle – Какъв файл с имена на TNS използвам?

  4. 11gR2 Compression Advisor =Evil

  5. Процедура за експортиране на таблица в множество csv файлове