Serializabilitas Two Phase Locking Adapted from: Connolly, Thomas., et.al., 2002. Database System. Wokingham England: Addison-Wesley Publishing Company
Serializability (Serializabilitas) Ada 3 masalah dl konkurensi perlu protokol pengendalian konkurensi. Solusi yg jelas aman: hanya satu transaksi yg diperbolehkan untuk dieksekusi pada suatu waktu sampai commit, sebelum transaksi lainnya dimulai. transaksi dieksekusi secara serial tidak memberikan efek konkurensi sebenarnya Serializabilitas: sejumlah transaksi yang dieksekusi secara konkuren dapat memberikan hasil yang sama dengan eksekusi secara serial
Schedule (Jadwal) Sebuah transaksi terdiri atas serangkaian urutan baca dan tulis ke basisdata. Schedule (jadwal): urutan baca tulis yang dilakukan oleh sekumpulan transaksi Jadwal serial: suatu jadwal operasi setiap transaksi yang dieksekusi secara serial tanpa diselingi operasi transaksi lainnya. 3
Schedule (Jadwal) Jadwal nonserial: jadwal operasi dari sekumpulan transaksi yang konkuren saling bersambung Tujuan serializabilitas: memperoleh jadwal nonserial yang mengizinkan sekumpulan transaksi dieksekusi secara konkuren dan memberikan hasil yang sama dengan eksekusi serial. Jadwal nonserial demikian disebut serializable. 4
Serializabilitas Dalam serializabilitas: Jika dua transaksi hanya membaca data, tak terjadi konflik, urutan tak penting. Jika dua transaksi membaca dan atau menulis pada item data yang berbeda, tidak terjadi konflik, urutan tidak penting. Jika sebuah transaksi menulis sebuah item data & transaksi lainnya membaca atau menulis item data yang sama, urutan eksekusi menjadi penting. 5
Tes Serializabilitas Gunakan precedence graph: Buat simpul untuk setiap transaksi. Buat busur berarah T1 T2 , jika transaksi T2 membaca harga yang ditulis oleh T1 , atau T2 menulis harga sesudah dibaca oleh T1, atau T2 menulis harga sesudah ditulis oleh T1. Jika ada siklus dalam graf, jadwal tidak serializable. T1 T2 x y 6
Apakah jadwal untuk transaksi berikut serializable? Transaksi A Transaksi B t1 begin_transaction begin_transaction t2 read(balx) read(balx) t3 balx= balx + 200 balx= balx – 80 t4 write(balx) write(balx) t5 commit commit t6 7
Apakah jadwal untuk transaksi berikut serializable? Transaksi A Transaksi B begin_transaction t1 read(balx) t2 begin_transaction balx= balx – 80 t3 read(balx) write(balx) t4 balx= balx + 200 commit t5 write(balx) t6 commit 8
Teknik Pengendalian Konkurensi Serializabilitas dapat diperoleh dengan beberapa cara. Ada dua teknik pengendalian konkurensi, yaitu: Locking Timestamping 9
Locking (Penguncian) Merupakan prosedur yang digunakan untuk mengendalikan akses yang konkuren. Ketika sebuah transaksi mengakses bd, untuk mencegah kesalahan update, akses yang dilakukan oleh transaksi lain ditolak. 10
Locking : Jenis Kunci Ada dua jenis kunci yaitu: Read lock atau shared lock (S-lock). Transaksi yang memegang kunci ini hanya boleh membaca item data. Write lock atau exclusive lock atau (X-lock). Transaksi yang memegang kunci ini boleh membaca dan mengupdate item data. 11
Protokol penggunaan S-lock dan X-lock Untuk membaca suatu tuple, sebuah transaksi harus memegang S-lock pada tuple tsb. Untuk menulis (update) suatu tuple, sebuah transaksi harus memegang X-lock pada tuple tsb. Dalam kondisi satu transaksi melakukan permintaan lock dan belum dapat diberikan, maka transaksi tsb harus menunggu (status wait). 12
Cara kerja locking Asumsi: penguncian dimungkinkan hanya pada satu tuple item data. Jika sebuah transaksi memegang exclusive lock pada tuple t, maka permintaan kunci dari transaksi lain untuk tuple t ditolak. Jika sebuah transaksi memegang shared lock pada tuple t, permintaan transaksi lain untuk exclusive lock pada tuple t ditolak, permintaan transaksi lain untuk shared lock pada tuple t diizinkan. 13
Two-phase locking (2PL) Penggunaan kunci dalam transaksi tidak menjamin serializabilitas jadwal, harus ada protokol tambahan yaitu 2PL (two phase locking). Suatu transaksi mengikuti 2PL, jika semua operasi locking didahului oleh operasi unlock pada transaksi. Aturannya adalah sebagai berikut: Sebuah transaksi harus memperoleh kunci sebelum operasi pada sebuah item dilakukan. Sekali transaksi melepaskan sebuah kunci, transaksi tersebut tidak dapat memperoleh kunci baru. 14
Contoh 2PL: Kasus 1 Mencegah kehilangan update T1: T2: balx t1 begin_transaction 100 begin_transaction t2 write_lock(balx) 100 write_lock(balx) t3 read(balx) 100 wait t4 balx = balx + 100 100 wait t5 write(balx) 200 wait t6 unlock(balx) 200 read(balx) t7 commit 200 balx = balx – 10 t8 200 write(balx) t9 190 unlock(balx) t10 190 commit t11 190 15
Latihan Terapkan 2PL pada contoh kasus 2 & 3 (kuliah ybl.) Mencegah masalah ketergantungan yang tidak komit Mencegah masalah analisis yang tidak konsisten 16