02 simbada a_04_concurrency

25
Concurrency by : Endah Nursalehah 1200212 Intan Permatasari 1205415 Nuruly Firdausi 1205900 Syifa Nurul Fauziah 1201734

Transcript of 02 simbada a_04_concurrency

Page 1: 02 simbada a_04_concurrency

Concurrency

by :Endah Nursalehah 1200212Intan Permatasari 1205415Nuruly Firdausi 1205900Syifa Nurul Fauziah 1201734

Page 2: 02 simbada a_04_concurrency

Concurrency Control

Jika pada suatu sistem basis data terdapat sejumlah transaksi yang terjadi secara bersamaan , maka transaksi tersebut harus dapat dieksekusi dan konsistensi basis data dapat tetap terpelihara. mekanisme pengendalian konkurensi (concurency control) berlandaskan pada prinsip-prinsip serializability. yaitu transaksi dilakukan secara berurutan/serial.

Page 3: 02 simbada a_04_concurrency

Concurrency control

• Concurrency control adalah proses pengaturan operasi–operasi dalam banyak transaksi yang berjalan secara simultan pada database tanpa mengganggu operasi pada transaksi lainnya sehingga dapat menghasilkan data yang konsisten ( Connolly, 2005, p577 ).

Page 4: 02 simbada a_04_concurrency

Masalah Penting dalam Concurrency

Lost-UpdateLost-Update Inconsistent Analysis Inconsistent Analysis Uncommited

Dependency (dirty read) Uncommited

Dependency (dirty read)

Page 5: 02 simbada a_04_concurrency

Lost-Update (1) Masalah Penting dalam Concurrency

Time T1 T2 balx

T1 Begin_transaction 100

T2 Begin_transaction read(balx) 100

T3 read(balx) balx = balx + 100 100

T4 balx = balx - 100 write(balx) 200

T5 write(balx) commit 90

T6 commit 90

Page 6: 02 simbada a_04_concurrency

Lost-Update (2) Masalah Penting dalam Concurrency

Penjelasan :

Transaksi T1 dan T2 mulai pada waktu yang hampir bersamaan, dan keduanya membaca saldo $100. T2 menambah balx $100 menjadi $200 dan menyimpan hasil perubahannya dalam database.

Di sisi lain, transaksi T1 mengurangi copy dari balx $10 menjadi $90 dan menyimpan nilai ini dalam database, menimpa hasil update sebelumnya dan akhirnya menghilangkan $100 yang telah ditambahkan sebelumnya ke dalam saldo. Kehilangan update transaksi T2 dapat dihindari dengan mencegah T¬1 membaca nilai dari bal x sampai update T2 telah selesai.

Page 7: 02 simbada a_04_concurrency

Masalah Penting dalam Concurrency (1)

Time T1 T2 balx

T1 Begin_transaction 100

T2 read(balx) 100

T3 balx = balx + 100 100

T4 Begin_transaction write(balx) 200

T5 read(balx) . . . 200

T6 balx = balx - 100 rollback 100

T7 write(balx) 190

Page 8: 02 simbada a_04_concurrency

Masalah Penting dalam Concurrency (2)

Penjelasan :

Transaksi T1 dan T2 mulai pada waktu yang hampir bersamaan, dan keduanya membaca saldo $100. T2 menambah balx $100 menjadi $200 dan menyimpan hasil perubahannya dalam database.

Di sisi lain, transaksi T1 mengurangi copy dari balx $10 menjadi $90 dan menyimpan nilai ini dalam database, menimpa hasil update sebelumnya dan akhirnya menghilangkan $100 yang telah ditambahkan sebelumnya ke dalam saldo. Kehilangan update transaksi T2 dapat dihindari dengan mencegah T¬1 membaca nilai dari bal x sampai update T2 telah selesai.

Page 9: 02 simbada a_04_concurrency

Inconsistent Analysis(1)Masalah Penting dalam Concurrency

Masalah inconsistent analysis muncul ketika sebuah transaksi membaca beberapa nilai dari database tapi transaksi kedua mengubah beberapa darinya ketika eksekusi transaksi yang pertama.

Page 10: 02 simbada a_04_concurrency

Inconsistent Analysis(3)Masalah Penting dalam Concurrency

Time T1 T2 balx baly balz sum

T1 begin_tran 100 50 25

T2 begin_tran sum = 0 100 50 25 0

T3 read(balx) read(balz) 100 50 25 0

T4 bal x = bal x - 10 sum = sum + balz 100 50 25 100

T5 write(balx) read(baly) 90 50 25 100

T6 read(balz) sum = sum + baly 90 50 25 150

T7 balz = balz + 10 90 50 25 150

T8 write(balz) 90 50 35 150

T9 commit read(balz) 90 50 35 150

T10 sum = sum + balz 90 50 35 185

T11 commit 90 50 35 185

Page 11: 02 simbada a_04_concurrency

Inconsistent Analysis(2)Masalah Penting dalam Concurrency

Sebuah transaksi yang meringkas data pada sebuah database (contohnya, saldo total) akan mendapat hasil yang tidak akurat jika, ketika berjalan, transaksi lain sedang mengubah database.

Pada contoh tersebut, ringkasan transaksi T6 sedang berjalan secara bersamaan dengan transaksi T5. Transaksi T6 sedang menjumlahkan saldo rekening x ($100), rekening y ($50), dan rekening z($25). Namun, di tengah jalan, transaksi T5 telah mentransfer $10 dari balx ke bal¬z, sehingga T6 sekarang mempunyai hasil yang salah (lebih besar $10).

Page 12: 02 simbada a_04_concurrency

Serializability dan Recoverability

• Tujuan protokol concurrency control adalah untuk menjadwalkan transaksi sedemikian rupa sehingga dapat menghindar dari berbagai gangguan, dan juga mencegah tipe-tipe masalah yang digambarkan pada sesi sebelumnya.

Page 13: 02 simbada a_04_concurrency

Schedule

• Schedule adalah sebuah urutan dari operasi-operasi oleh satu set transaksi yang jalan bersamaan yang menjaga urutan operasi pada setiap transaksi individual ( Connolly, 2005, p580 ).

• Sebuah transaksi mencakup sebuah urutan operasi yang terdiri dari tindakan baca dan/atau tulis pada database, diikuti oleh sebuah tindakan commit atau abort.

• Sebuah schedule S terdiri dari sebuah urutan operasi dari sekumpulan n transaksi T1, T2, … Tn, bergantung pada constraint yang dilindungi oleh urutan operasi untuk setiap transaksi pada schedule tersebut. Jadi, untuk setiap transaksi Ti pada schedule S, urutan operasi pada Ti harus sama dengan schedule S.

Page 14: 02 simbada a_04_concurrency

Metode Locking

Locking adalah sebuah prosedur yang digunakan untuk mengendalikan akses bersamaan ke data. Ketika sebuah transaksi sedang mengakses database, sebuah lock mungkin menolak akses ke transaksi lain untuk mencegah hasil yang salah ( Connolly, 2005, p587 ).

Penggunaan lock ini adalah untuk menjaga konsistensi data didalam database.

Page 15: 02 simbada a_04_concurrency

Shared Lock

• Jika sebuah transaksi mempunyai sebuah shared lock pada sebuah item data, transaksi tersebut dapat membaca item tapi tidak dapat mengubah datanya ( Connolly, 2005, p588 ).

Page 16: 02 simbada a_04_concurrency

Exclusive Lock

Jika sebuah transaksi mempunyai sebuah exclusive lock pada sebuah item data, transaksi tersebut dapat membaca dan mengubah item data

( Connolly, 2005, p588 ).

Page 17: 02 simbada a_04_concurrency

Cara Penggunaan Lock (1)

1. Transaksi apapun yang membutuhkan akses pada sebuah item data harus melakukan lock terhadap item tersebut, meminta shared lock untuk akses membaca saja atau sebuah exclusive lock untuk akses membaca dan menulis.

2. Jika item belum dikunci oleh transaksi lain, lock tersebut akan dikabulkan

3. Jika item sedang dikunci, DBMS menentukan apakah permintaan ini compatible dengan lock saat ini. Jika diminta shared lock pada sebuah item yang sudah mempunyai shared lock terpasang padanya, permintaan itu akan dikabulkan. Selain itu, transaksi harus menunggu sampai lock yang ada terlepas.

Page 18: 02 simbada a_04_concurrency

Cara Penggunaan Lock (2)

4. Sebuah transaksi lanjut memegang lock sampai transaksi tersebut melepasnya baik pada waktu eksekusi ataupun pada waktu transaksi tersebut berakhir (abort atau commit). Efek operasi tulis akan terlihat pada transaksi lain hanya pada waktu exclusive lock telah dilepas.

Page 19: 02 simbada a_04_concurrency

Two Phase Locking

• Two Phase Locking adalah sebuah transaksi yang mengikuti protokol two-phase locking jika semua operasi locking mendahului operasi unlock pertama pada transaksi ( Connolly, 2005, p589 ).

Page 20: 02 simbada a_04_concurrency

Aturan Two Phase Locking

• Sebuah transaksi harus mendapatkan sebuah lock pada item sebelum beroperasi pada item tersebut. Lock tersebut bisa berupa baca atau tulis, tergantung dari tipe akses yang dibutuhkan

• Sebelum transaksi melepaskan sebuah lock, transaksi tersebut tidak akan pernah mendapatkan lock baru lainnya.

Page 21: 02 simbada a_04_concurrency

Deadlock

• Deadlock adalah jalan buntu yang dapat terjadi ketika dua atau lebih transaksi masing-masing menunggu lock yang sedang dipegang oleh transaksi lainnya untuk dilepas.

• Cara untuk menghancurkan deadlock, yaitu abort satu atau lebih transaksi.

• Tiga cara untuk menangani deadlock, yaitu timeout, deadlock prevention dan deadlock detection and recovery.

Page 22: 02 simbada a_04_concurrency

Timeout

• Pendekatan sederhana pada pencegahan deadlock adalah berdasarkan lock timeout. Dengan pendekatan ini, sebuah transaksi yang meminta sebuah lock akan menunggu hanya sampai periode waktu tertentu yang didefinisikan sistem.

Page 23: 02 simbada a_04_concurrency

Deadlock Prevention

• Untuk mencegah deadlock adalah dengan memesan transaksi menggunakan timestamp transaksi. Dua algoritma telah ditemukan oleh Rosenkrantz.

• Algoritma pertama, Wait-Die, mengijinkan hanya transaksi yang lebih tua untuk menunggu yang lebih muda, jika tidak transaksi dibatalkan (die/mati) dan restart dengan timestamp yang sama, sehingga lama kelamaan transaksi tersebut akan menjadi transaksi aktif tertua dan tidak akan mati.

• Algoritma kedua, Wound-Wait, menggunakan pendekatan simetrikal. Hanya transaksi yang lebih muda yang dapat menunggu untuk yang lebih tua. Jika transaksi yang lebih tua meminta lock yang dipegang oleh transaksi yang lebih muda, transaksi yang lebih muda digagalkan.

Page 24: 02 simbada a_04_concurrency

Deadlock Detection

• Deadlock detection biasanya ditangani oleh konstruksi wait-for graph (WFG) yang menunjukkan ketergantungan transaksi, yaitu transaksi Ti tergantung pada Tj jika transaksi Tj memegang lock pada sebuah item data yang ditunggu oleh Ti.

• WFG adalah sebuah directed graph G = (N, E ) yang terdiri dari satu set node N dan satu set directed edge E, yang dikonstruksi sebagai berikut

1.Buat sebuah node untuk setiap transaksi. 2.Buat sebuah directed edge Ti → Tj , jika transaksi Ti

menunggu untuk melakukan lock sebuah item yang sedang di-lock oleh Tj.

Page 25: 02 simbada a_04_concurrency

• Deadlock terjadi jika dan hanya jika WFG mengandung sebuah cycle. Gambar di atas menunjukkan WFG yang menunjukkan deadlock antara dua transaksi.