You are on page 1of 3

TUGAS IF 3140 MANAJEMEN BASIS DATA K2

Pandu Kartika Putra 13511090 Genta Indra Winata 13511094

Buktikan bahwa 2 phase protocol tidak cukup untuk menghindari deadlock!


Pertama perlu diketahui terlebih dahulu mengenai beberapa hal, yaitu : Locking Locking adalah sebuah mekanisme yang digunakan untuk mengatasi masalah sinkronisasi dan konkurensi akses data. Inti dari konsep dari locking adalah beberapa hal berikut : Sebuah item data mempunyai sebuah lock yang diasosiasikan dengan dirinya. Sebelum sebuah transaksi T1 mengakses data, scheduler terlebih dahulu memeriksa lock dari data tersebut. Jika ada transaksi lain, T2, yang memegang lock dari data tersebut, maka T1 harus menunggu sampai T2 melepas lock tersebut. Hanya satu transaksi yang dapat mengakses data pada satu waktu

Jenis Lock Terdapat 2 jenis lock mode yang dapat dilakukan terhadap sebuah data item: 1. Exclusive (X) mode. Data item pada mode ini dapat dibaca maupun ditulis. 2. Shared (S) mode. Data item pada mode ini hanya dapat dibaca. Notasi Notasi yang sering digunakan untuk tipe lock dan operasi pada transaksi pada basis data adalah : Read lock : rl[x] Write lock : wl[x] Read unlock : ru[x] Write unlock : wu[x] Read : r[x] Write : w[x] Operasi p pada data item x : p[x] Lock yang berasosiasi terhadap sebuah operasi p[x] : pl[x]

2 Phase Locking 2 Phase Locking adalah sebuah protokol yang diciptakan untuk mengatur penggunaan lock dengan mengontrol kapan transaksi-transaksi mendapatkan dan melepaskan lock yang berasosiasi dengan mereka. Protokol ini bertujuan agar akses konkurensi dan sinkronisasi data pada transaksi basis data dapat ditangani dengan baik.

Secara ringkas, berikut merupakan konsep utama 2 Phase Locking : 1. Ketika sebuah operasi p[x] dari transaksi T1, scheduler memeriksa apakah pl[x] bertentangan dengan lock lain (misalnya ql[x]) yang sudah ada. Jika iya, maka scheduler akan menunda p[x] dan membuat T1 menunggu untuk mendapatkan lock yang dibutuhkannya. Jika tidak ada konflik dengan lock lain, maka scheduler dapat langsung memasang pl[x] dan kemudian p[x] dapat dieksekusi. 2. Ketika scheduler telah memasang lock untuk T1, (misalkan pl[x]), maka scheduler mencegah lock tersebut untuk dilepas sampai p[x] (operasi yang terasosiasi dengan pl[x]) telah diproses. 3. Ketika scheduler telah melepas sebuah lock untuk sebuah transaksi, maka scheduler kemudian tidak dapat mendapatkan lock lagi untuk transaksi tersebut dalam data item apapun. Konsep (1) mencegah akses konkuren dari 2 transaksi ke sebuah data item terjadi dalam mode yang bertentangan/berkonflik. Konsep (2) mendukung konsep (1) dengan memastikan bahwa operasi pada data item dilakukan dalam urutan yang ditentukan oleh scheduler. Sebagai contoh, misalkan transaksi Ti mendapatkan rl[x], yang kemudian dilepaskan sebelum Ti[x] diproses, maka hal ini akan memberi kemungkinan untuk Tj mendapatkan lock yang bertentangan pada data X, misal wl[x], dan melakukan operasi w[x]. Walaupun scheduler telah mengatur bahwa Ti[x] adalah sebelum w[x], sebenarnya tanpa konsep (2), tidak ada garansi bahwa operasi dilakukan benar-benar dalam urutan itu. Konsep (3), seringkali disebut two phase rule, adalah konsep yang membuat protokol ini disebut sebagai two-phase locking. Sebuah transaksi dapat dibagi menjadi 2 fase, yaitu : Growing phase, yaitu fase saat transaksi mendapatkan lock Shrinking phase, yaitu fase saat transaksi melepaskan lock

Secara umum, fungsi dari konsep (3) ini adalah menjamin bahwa seluruh pasangan dari operasi yang bertentangan dari dalam dua transaksi dijadwalkan dalam urutan yang sama. Deadlock Deadlock adalah situasi saat terjadi mutual block dari transaksi-transaksi yang sedang dioperasikan. Ketika deadlock terjadi, eksekusi dari transaksi-transaksi ini berhenti dan saling menunggu untuk melepaskan lock, serta tidak ada penyelesaian yang dapat dicapai. Perhatikan contoh berikut :

Baik T3 maupun T4 tidak dapat melanjutkan eksekusinya. Dengan mengeksekusi lock-S(B) menyebabkan T4 harus menunggu T3 untuk melepaskan lock pada B, sementara dengan mengeksekusi lock-X(A) menyebabkan T3 untuk menunggu T4 untuk melepaskan lock pada A.

Situasi seperti ini disebut dengan deadlock. Untuk menangani deadlock salah satu T3 atauT4 harus di roll back dan lock nya dilepaskan. Deadlock pada 2 Phase Locking Protocol Berikut merupakan inti dari tugas ini. Pada 2 Phase Locking Protocol, meskipun serializability terjamin dan konkurensi serta sinkronisasi akses diatur dengan baik, tetapi hal ini tetap tidak menjamin hilangnya deadlock dari scheduler yang menggunakan 2 Phase Locking Protocol. Sebagai contoh, misalkan sebuah scheduler 2PL sedang memproses transaksi T2 dan T3. T2 : r2[x] -> w2[y] -> c2 ; T2 : w3[y] -> w3[x] -> c3 Perhatikan sebuah contoh urutan operasi sebagai berikut 1. Pada awalnya, T2 dan T3 sama-sama tidak memegang lock apapun 2. Scheduler kemudian menerima permintaan operasi r2[x], memasang rl2[x], lalu operasi r2[x] dieksekusi. 3. Scheduler kemudian menerima permintaan operasi w3[y], memasang wl3[y], lalu operasi w3[y] dieksekusi. 4. Scheduler kemudian menerima permintaan operasi w3[x], tetapi tidak memasang wl3[x], karena bertentangan dengan rl2[x] yang telah dipasang sebelumya. Maka operasi w3[x] ditunda. 5. Scheduler kemudian menerima permintaan operasi w2[y], tetapi tidak memasang wl2[y], karena bertentangan dengan wl3[y] yang telah dipasang sebelumya. Maka operasi w2[y] ditunda. Walaupun scheduler mengikuti aturan 2 Phase Locking dengan benar, tapi baik T2 maupun T3 tidak dapat selesai (saling menunggu, deadlock) tanpa melanggar konsep-konsep 2 Phase Locking. Operasioperasi pada kasus diatas beberapa harus dilakukan tanpa memasang lock terlebih dahulu (melanggar konsep 2PL). Alternatif lain, transaksi bisa merelease lock sementara agar operasi tertentu bisa dilakukan, tapi kemudian harus mendapat lock lagi untuk melakukan operasi lain (melanggar konsep 2PL). Contoh di atas adalah bukti nyata bahwa masalah klasik deadlock, yaitu dari 2 proses yang sedang berjalan, salah satu harus melepas resource agar yang lain bisa berlanjut, sehingga akhirnya kedua proses bisa berjalan. Deadlock juga dapat terjadi ketika sebuah transaksi berusaha untuk memperkuat/mengupgrade read lock menjadi write lock. Misalkan sebuah transaksi T1 membaca data item X dan kemudian mencoba untuk menulis ke data tersebut. T1 meminta r1[x] ke scheduler, yang kemudian memasang rl1[x]. Kemudia T1 meminta w1[x] ke scheduler, sehingga scheduler harus meningkatkan rl1[x] menjadi wl1[x]. Penguatan dari lock ini disebut lock conversion. Untuk mematuhi protokol 2PL, maka scheduler tidak boleh melepas rl1[x]. Meski ini bukan masalah (lock yang berasal dari transaksi yang sama tidak bertentangan satu sama lain), tetapi jika dua transaksi yang berbeda berusaha mengkonversi read lock mereka pada data item yang sama menjadi write lock secara konkuren/bersama, yang terjadi adalah deadlock. Hal ini disebabkan ketika transaksi T1 berusaha mengkonversi read lock menjadi write lock, maka otomatis konversi ini akan tertunda karena bertentangan dengan readlock dari T2. Hal ini juga berlaku sebaliknya dari T2 ke T1. Di penjelasan atas juga sudah dijelaskan bahwa read lock dari masingmasing transaksi tidak boleh dilepas karena akan melanggar konsep 2PL (mendapatkan lock lagi setelah melepas lock). Akibatnya, T1 dan T2 akan saling menunggu pelepasan read lock, dan dengan demikian deadlock pun terjadi.

You might also like