Back to IF3140 Sistem Basis Data
2.3: Deteksi & Pemulihan Deadlock
Questions/Cues
Apa itu Deadlock Detection?
Apa itu Wait-for Graph (WFG)?
Kapan deadlock terjadi di WFG?
Kapan deteksi dijalankan?
Apa itu Deadlock Recovery?
Langkah 1: Victim Selection?
Faktor pemilihan korban?
Langkah 2: Rollback?
Apa itu Total Rollback?
Apa itu Partial Rollback?
Apa itu Starvation?
Reference Points
- Slides “11 - Concurrency Control - 2.pdf” (Hal 23-24)
Deadlock Detection (Deteksi)
Ini adalah pendekatan “paling optimis”: biarkan deadlock terjadi, lalu deteksi, dan terakhir pulihkan.
Keuntungan: Tidak ada overhead dari prevention atau avoidance pada setiap permintaan lock.
Kekurangan: Deadlock bisa terjadi dan “menggantung” sistem untuk sementara waktu sampai terdeteksi.
Metode: Wait-for Graph (WFG)
Metode deteksi yang paling umum adalah dengan membangun Wait-for Graph (Graf Tunggu).
Node (Simpul): Setiap node adalah satu transaksi yang sedang aktif.
Edge (Panah): Sebuah panah
Ti -> Tjdibuat jika transaksi Ti sedang menunggu lock yang saat ini dipegang oleh transaksi Tj.Kondisi Deadlock:
Sistem berada dalam kondisi deadlock jika dan hanya jika terdapat siklus (cycle) di dalam Wait-for Graph.
Contoh:
T1 menunggu T2 (
T1 -> T2)T2 menunggu T3 (
T2 -> T3)T3 menunggu T1 (T3 → T1)
Ini adalah siklus, yang berarti T1, T2, dan T3 sedang deadlock.
Kapan Deteksi Dijalankan?
Algoritma pencarian siklus di WFG harus dijalankan:
Secara Periodik: Misal, setiap 1 menit atau setiap 5 detik. Jika terlalu sering, overhead tinggi. Jika terlalu jarang, deadlock akan “menggantung” sistem terlalu lama.
Setiap Ada Tunggu: Setiap kali sebuah transaksi terpaksa menunggu, cek WFG. Ini mendeteksi deadlock secara instan, tetapi overhead-nya sangat tinggi.
Deadlock Recovery (Pemulihan)
Setelah siklus (deadlock) terdeteksi, sistem harus “memutus” siklus tersebut. Ini dilakukan dengan me-rollback (membatalkan) satu atau lebih transaksi di dalam siklus.
Langkah 1: Victim Selection (Pemilihan Korban)
Transaksi mana di dalam siklus yang harus di-rollback?
Faktor-faktor Penentu:
Prioritas: Apakah ada transaksi yang lebih penting? (JANGAN rollback transaksi batch penting).
Biaya Rollback: Pilih yang paling “murah” untuk di-rollback.
Berapa lama transaksi telah berjalan?
Berapa banyak lock yang dipegang?
Berapa banyak data yang telah diubah?
Berapa banyak transaksi lain yang harus ikut di-rollback (jika tidak pakai Strict 2PL)?
Langkah 2: Rollback (Pembatalan)
Total Rollback: Abort seluruh transaksi korban dari awal dan mulai ulang. Ini adalah cara paling sederhana.
Partial Rollback: Rollback transaksi korban hanya sejauh yang diperlukan untuk membebaskan lock yang menyebabkan siklus. Lebih efisien, tetapi jauh lebih kompleks untuk diimplementasikan (perlu savepoint).
Masalah: Starvation (Kelaparan)
Definisi: Situasi di mana sebuah transaksi yang sama terus-menerus dipilih sebagai “korban” rollback setiap kali ia mencoba berjalan.
Solusi: Sistem harus melacak “jumlah rollback” dari setiap transaksi dan memasukkannya sebagai faktor dalam Victim Selection. Jangan pilih transaksi yang sudah terlalu sering jadi korban.
Deadlock Detection adalah strategi yang membiarkan deadlock terjadi dan mendeteksinya menggunakan Wait-for Graph (WFG), di mana node adalah transaksi dan panah adalah relasi tunggu. Sebuah siklus (cycle) di WFG menandakan adanya deadlock. Setelah terdeteksi (biasanya secara periodik), sistem melakukan Recovery (Pemulihan) dengan memilih korban (Victim Selection) berdasarkan biaya rollback atau prioritas. Korban tersebut kemudian di-Rollback (bisa Total atau Partial) untuk memutus siklus. Sistem harus waspada terhadap Starvation, di mana transaksi yang sama selalu dipilih sebagai korban.
Additional Information
Pendalaman: Deteksi Siklus vs Timestamp
Anda mungkin bertanya: mengapa WFG dibutuhkan jika kita sudah punya skema Wait-Die dan Wound-Wait?
Wait-Die dan Wound-Wait adalah skema Penghindaran (Avoidance). Mereka mencegah siklus terbentuk di WFG. Jika sebuah panah
Ti -> Tjakan dibuat dan itu berpotensi menciptakan siklus (misal Ti lebih muda dari Tj di Wait-Die), skema ini langsung menolaknya (Ti rollback).Deadlock Detection (menggunakan WFG) adalah skema yang berbeda. Ia mengizinkan panah
Ti -> Tjdibuat kapan saja (sesuai permintaan lock). Ia tidak mengecek saat panah dibuat. Ia baru mengecek “apakah ada siklus?” secara periodik.DBMS modern (seperti PostgreSQL, SQL Server, Oracle) umumnya menggunakan Deadlock Detection (dengan WFG) daripada Avoidance. Alasannya, deadlock sebenarnya adalah kejadian yang sangat jarang (rare event) dalam aplikasi yang dirancang dengan baik. Biaya (overhead) untuk mencegah atau menghindarinya pada setiap permintaan lock lebih mahal daripada biaya membiarkannya terjadi dan mendeteksinya sesekali.
