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
| Metode | Cara kerja | Kelebihan | Kekurangan |
|---|---|---|---|
| Terpusat | Satu situs mengumpulkan WFG lokal semua situs dan menyatukannya | Pasti menemukan semua siklus, sederhana | Titik kegagalan tunggal, bottleneck, deadlock semu |
| Path pushing | Tiap situs mendorong jalur tunggu yang melibatkan transaksi luar ke situs berikutnya | Tanpa koordinator; pesan sebanding panjang siklus | Informasi antar situs tidak serentak |
| Edge chasing | Transaksi menunggu mengirim probe (i, j, k); deadlock bila probe kembali ke pengirim | Beban pesan paling ringan | Tiap 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.
| Skema | Peminta lebih tua | Peminta lebih muda | Sifat |
|---|---|---|---|
| Wait-Die | Menunggu | Mati lalu restart dengan cap waktu lama | Non-preemptive |
| Wound-Wait | Melukai pemegang (pemegang di-rollback) | Menunggu | Preemptive |
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)