2. 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.
3. 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 ).
4. Masalah Penting dalam Concurrency
Lost-Update
Lost-Update
Uncommited
Uncommited
Dependency (dirty read)
Dependency (dirty read)
Inconsistent Analysis
Inconsistent Analysis
5. Masalah Penting dalam Concurrency
Lost-Update (1)
T1
Time
T1
T2
balx
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
6. Masalah Penting dalam Concurrency
Lost-Update (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.
7. Masalah Penting dalam Concurrency (1)
T1
Time
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
8. 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.
9. Masalah Penting dalam Concurrency
Inconsistent Analysis(1)
Masalah inconsistent analysis muncul ketika sebuah
transaksi membaca beberapa nilai dari database tapi
transaksi kedua mengubah beberapa darinya ketika
eksekusi transaksi yang pertama.
10. Masalah Penting dalam Concurrency
Inconsistent Analysis(3)
T1
Time
T1
T2
balx
baly
balz
begin_tran
100
50
sum
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
11. Masalah Penting dalam Concurrency
Inconsistent Analysis(2)
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).
12. 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.
13. 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.
14. 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.
15. 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 ).
16. Exclusive Lock
Jika sebuah transaksi mempunyai sebuah
exclusive lock pada sebuah item data, transaksi
tersebut dapat membaca dan mengubah item
data
( Connolly, 2005, p588 ).
17. 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.
18. 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.
19. 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 ).
20. 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.
21. 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.
22. 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.
23. 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.
24. 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.
25. • Deadlock terjadi jika dan hanya jika WFG
mengandung sebuah cycle. Gambar di atas
menunjukkan WFG yang menunjukkan deadlock
antara dua transaksi.