Lewati ke isi
ORACLEDECK

Topik 11

Manajemen Deadlock

Wait-for graph, deteksi terpusat dan terdistribusi, deadlock semu, pencegahan, dan pemilihan korban.

Kemampuan akhir yang diharapkan. Memahami kejadian deadlock dan dapat mengenalinya dalam pemrosesan data terdistribusi.

Empat syarat Coffman

Mencegah salah satu syarat berarti mencegah deadlock. Skema wait-die dan wound-wait menyerang syarat keempat.

  • Mutual exclusion — sumber daya hanya bisa dipegang satu transaksi
  • Hold and wait — transaksi memegang sumber daya sambil menunggu yang lain
  • No preemption — sumber daya tidak bisa direbut paksa
  • Circular wait — ada rantai penantian yang melingkar

Tiga metode deteksi

MetodeCara kerjaKelebihanKekurangan
TerpusatSatu situs mengumpulkan WFG lokal semua situs dan menyatukannyaPasti menemukan semua siklus, sederhanaTitik kegagalan tunggal, bottleneck, deadlock semu
Path pushingTiap situs mendorong jalur tunggu yang melibatkan transaksi luar ke situs berikutnyaTanpa koordinator; pesan sebanding panjang siklusInformasi antar situs tidak serentak
Edge chasingTransaksi menunggu mengirim probe (i, j, k); deadlock bila probe kembali ke pengirimBeban pesan paling ringanTiap transaksi menunggu harus memulai probe sendiri

Deadlock semu (phantom deadlock)

WFG dari situs A dan situs B tidak pernah diambil pada saat yang benar-benar sama. Sisi yang sebenarnya sudah dilepas masih tercatat, dan siklus palsu terbentuk. Detektor lalu mengorbankan satu transaksi yang sesungguhnya tidak buntu.

Ini bukan bug yang bisa diperbaiki, melainkan konsekuensi langsung dari tidak adanya waktu global pada sistem terdistribusi. Yang bisa dilakukan hanya mengurangi frekuensinya — misalnya dengan memperpendek jeda pengumpulan WFG.

Pencegahan berbasis cap waktu

Pada kedua skema, arah sisi tunggu selalu searah cap waktu, sehingga siklus mustahil terbentuk. Transaksi yang di-restart mempertahankan cap waktu lamanya agar tidak kelaparan selamanya.

SkemaPeminta lebih tuaPeminta lebih mudaSifat
Wait-DieMenungguMati lalu restart dengan cap waktu lamaNon-preemptive
Wound-WaitMelukai pemegang (pemegang di-rollback)MenungguPreemptive

Pemilihan korban

  • Termuda — paling sedikit kerja yang terbuang
  • Kunci paling sedikit — paling murah dibatalkan
  • Kerja paling sedikit — meminimalkan pengulangan
  • Prioritas terendah — transaksi bisnis paling tidak kritis dikorbankan lebih dulu

Coba di terminal

Kueri di bawah memperagakan konsep topik ini pada data sungguhan. Tekan ▶ Jalankan untuk membukanya di Terminal SQL, lalu ubah sesuka hati — sesi terminal adalah salinan pribadi di peramban Anda.

Kunci yang ditahan transaksi ragu-ragu

Koordinator jatuh setelah PREPARE: peserta menahan kunci, perintah lain ke situs itu ditolak ORA-01591 — sumber tunggu yang mirip deadlock. terdistribusi galat disengaja: ORA-02054, ORA-01591

\gagal koordinator
DELETE FROM daftar@jakarta WHERE id_daftar = 1;
DELETE FROM daftar@bandung WHERE id_daftar = 5;
COMMIT;
DELETE FROM daftar@bandung WHERE id_daftar = 6;

Graf tunggu dari data transaksi

Deteksi deadlock terpusat menyimpan sisi Ti → Tj; siklus dicari dengan join berulang. kosong

CREATE TABLE tunggu (menunggu VARCHAR2(3), ditunggu VARCHAR2(3), situs VARCHAR2(10));
INSERT INTO tunggu VALUES ('T1', 'T2', 'S1'), ('T2', 'T3', 'S2'), ('T3', 'T1', 'S1');
SELECT a.menunggu, a.ditunggu, b.ditunggu AS lalu, c.ditunggu AS kembali_ke
  FROM tunggu a JOIN tunggu b ON a.ditunggu = b.menunggu
  JOIN tunggu c ON b.ditunggu = c.menunggu
 WHERE c.ditunggu = a.menunggu;

Jalankan sendiri

Sumber: Modul 1 (RPS pekan 11)