Back to IF3140 Sistem Basis Data
2.1: Konsep & Pencegahan Deadlock
Questions/Cues
Apa itu Deadlock?
Apa 4 kondisi perlu Deadlock?
- Mutual Exclusion
- Hold and Wait
- No Preemption
- Circular Wait
Apa itu Deadlock Prevention?
Bagaimana cara mencegah Hold and Wait?
Apa itu Pre-declaration?
Bagaimana cara mencegah Circular Wait?
Apa itu Total Order?
Reference Points
- Slides “11 - Concurrency Control - 2.pdf” (Hal 17-20)
Apa itu Deadlock?
Deadlock (kebuntuan) adalah sebuah kondisi di mana dua atau lebih transaksi saling menunggu selamanya untuk melepaskan lock yang mereka butuhkan.
Skenario Klasik:
T1:
lock-X(A).T2:
lock-X(B).T1:
request-X(B). (T1 Menunggu T2).T2:
request-X(A). (T2 Menunggu T1).Hasil: T1 menunggu T2, dan T2 menunggu T1. Keduanya akan menunggu selamanya dan tidak ada yang bisa lanjut.
Empat Kondisi Perlu (Necessary Conditions)
Sebuah deadlock bisa terjadi jika dan hanya jika keempat kondisi berikut terpenuhi secara bersamaan:
Mutual Exclusion (Mutex):
Hanya satu transaksi yang boleh memegang lock pada suatu item data pada satu waktu (setidaknya untuk lock yang tidak kompatibel seperti lock-X).
Ini adalah kondisi yang inheren dari mekanisme locking dan tidak bisa dihilangkan.
Hold and Wait (Tahan dan Tunggu):
Sebuah transaksi yang sudah memegang setidaknya satu lock (misal T1 pegang A) diizinkan untuk meminta dan menunggu lock baru (misal T1 minta B).
No Preemption (Tidak Ada Paksaan):
Lock yang sudah diberikan kepada sebuah transaksi tidak dapat diambil paksa (preempted) oleh sistem.
Lock hanya bisa dilepaskan secara sukarela oleh transaksi yang memegangnya.
- Circular Wait (Tunggu Melingkar):
Terdapat sebuah rantai (siklus) dari transaksi yang saling menunggu.
Contoh:
T1 -> T2 -> ... -> Tn -> T1, di manaTi -> Tjberarti Ti sedang menunggu lock yang dipegang oleh Tj.Deadlock Prevention (Pencegahan)
Strategi prevention (pencegahan) adalah memastikan agar sistem tidak akan pernah masuk ke kondisi deadlock. Caranya adalah dengan “menyerang” (menghilangkan) setidaknya salah satu dari empat kondisi perlu tersebut (biasanya Hold-and-Wait atau Circular-Wait).
1. Menyerang “Hold and Wait”
Metode: Pre-declaration (Deklarasi di Awal)
- Aturan: Setiap transaksi harus meminta SEMUA lock yang ia butuhkan di awal eksekusinya. Jika semua lock bisa didapat, transaksi boleh berjalan. Jika ada satu saja yang tidak bisa didapat, transaksi tidak boleh memegang lock apapun dan harus menunggu.
Kelemahan:
Sulit: Seringkali transaksi tidak tahu lock apa saja yang ia butuhkan di masa depan (tergantung kondisi data).
Boros: Transaksi akan memegang lock (misal di akhir operasi) jauh lebih lama dari yang diperlukan.
Konkurensi Rendah: Mengurangi tingkat konkurensi secara drastis.
2. Menyerang “Circular Wait”
Metode: Impose Total Order (Paksakan Urutan Total)
Aturan: Berikan nomor unik (urutan) pada semua item data (misal A=1, B=2, C=3, …).
Paksakan semua transaksi untuk meminta lock hanya dalam urutan yang menaik.
Contoh: Jika T butuh lock A dan B, ia harus minta
lock(A)dulu, barulock(B). Ia dilarang mintalock(B)lalulock(A).Mengapa ini berhasil? Situasi Circular Wait T1(pegang A, minta B) dan T2(pegang B, minta A) menjadi tidak mungkin. T2 akan dipaksa minta A dulu sebelum B.
Kelemahan:
Tidak Fleksibel: Urutan akses data tidak selalu sesuai dengan urutan yang dipaksakan.
Graph-Based Protocol (Catatan 1.4) adalah salah satu implementasi dari metode ini (menggunakan pohon sebagai urutan).
Deadlock adalah kondisi di mana dua atau lebih transaksi saling menunggu lock dalam sebuah siklus, sehingga berhenti selamanya. Ini bisa terjadi jika empat kondisi terpenuhi: Mutual Exclusion, Hold and Wait (pegang 1, tunggu 1), No Preemption (tidak bisa diambil paksa), dan Circular Wait (siklus tunggu). Deadlock Prevention (Pencegahan) bertujuan menghilangkan salah satu kondisi ini. Cara utamanya adalah menyerang Hold and Wait dengan Pre-declaration (minta semua lock di awal) atau menyerang Circular Wait dengan Total Order (memaksa urutan permintaan lock), meskipun keduanya memiliki kelemahan pada fleksibilitas dan konkurensi.
Additional Information
Pendalaman: Pencegahan vs Penghindaran vs Deteksi
Sangat penting untuk membedakan tiga strategi deadlock handling ini:
Prevention (Pencegahan): Paling ketat. Merancang sistem dengan aturan yang kaku (seperti Total Order) sehingga deadlock secara struktural tidak mungkin terjadi. Ini seperti membangun jalan layang di perempatan agar tidak mungkin terjadi tabrakan.
Avoidance (Penghindaran): (Akan dibahas di 2.2) Lebih dinamis. Sistem mengizinkan potensi deadlock, tetapi setiap kali ada permintaan lock, sistem akan mengecek apakah “aman” untuk memberikannya. Jika tidak aman (bisa menyebabkan deadlock), permintaan ditolak/ditunda. Ini seperti lampu merah yang mengatur lalu lintas.
Detection & Recovery (Deteksi & Pemulihan): (Akan dibahas di 2.3) Paling longgar. Sistem membiarkan deadlock terjadi. Secara periodik, sistem menjalankan algoritma untuk “mencari” apakah ada deadlock. Jika ditemukan, sistem akan memulihkannya (misal dengan me-rollback satu transaksi). Ini seperti membiarkan tabrakan terjadi, lalu memanggil polisi dan truk derek.