Saya memiliki kebuntuan yang dilaporkan dalam database Oracle RAC 3-node saya (versi 11.2.0.4) seperti yang dapat dilihat di Alert Log. Karena ini adalah database Oracle RAC, sumber daya dikelola secara global dan Lock Manager Daemon (LMD) terlibat. Pesan di log peringatan mengarahkan saya ke file pelacakan LMD yang berisi Grafik Tunggu Global (GWFG) ini.
*** 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
Catatan: SQL yang sebenarnya dan beberapa detail lainnya mungkin telah diubah untuk melindungi yang tidak bersalah.
Jadi di sana saya memiliki 3 sesi yang terlibat dalam kebuntuan. Masing-masing pada instance id 4, 5, dan 6.
Saya sedang melihat file jejak yang dihasilkan pada instance id 4. Di atas GWFG adalah informasi ini:
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
Jadi saya bisa melihat informasi tentang mesin, program, dan pernyataan SQL yang dieksekusi. Pengidentifikasi sesi pengguna berwarna merah di atas sesuai dengan nilai id di GWFG. Mari kita lihat dua baris pertama GFWG lagi.
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
Jadi pernyataan SQL dan detail sesi cocok dengan baris pertama ini. Sesi ini diblokir di inst 4. Pemblokir ada di inst6 dan diidentifikasi sebagai 0x5513ed318 . Nah siapa ini? Tidak ada detail lain dalam GWFG ini untuk membantu kami dengan BLOCKER.
Untuk mempelajari lebih lanjut tentang pemblokir, saya pergi ke inst 6 dan melakukan ini:
cd /u01/app/oracle/diag/rdbms/admin/orcl/orcl6/trace
grep 0x5513ed318 *
Jadi saya baru saja melakukan grep pada nilai identifikasi sesi dan diberi file jejak LMD. Melihat file jejak LMD di contoh lain memberi saya detail tentang sesi pemblokiran.
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
Saya dapat melihat bahwa sesi yang diblokir mengeluarkan pernyataan INSERT pada tabel dan pemblokir mengeluarkan DELETE pada tabel yang sama.
Ada sesi lain yang terlibat tetapi pada titik ini, adalah dasar untuk mendapatkan detail sesi menggunakan langkah yang sama di atas.
Mudah-mudahan, entri blog ini telah menunjukkan cara menggunakan GWFG untuk mendiagnosis pernyataan SQL dan objek yang terlibat dalam kebuntuan global. Saya tahu persis pernyataan SQL yang terlibat dalam kebuntuan, dan dengan ekstensi, objek yang terlibat juga. Penyelesaian masalah tidak berbeda dengan resolusi kebuntuan dalam database satu instance.
Untuk informasi lebih lanjut tentang Oracle RAC Global Enqueue Services (GES), baca Bab 2 buku Penyetelan Kinerja Oracle RAC saya.