Pengontrolan konkurensi merupakan salah satu fungsi dari DBMS
- Pada DBMS terpusat yang multi-user, dapat mengakses sejumlah transaksi pada waktu bersamaan.
- Transaction (transaksi) adalah suatu aksi atau serangkaian aksi yang dilakukan oleh seorang pemakai atau suatu program aplikasi, dimana dapat mengakses atau mengubah isi dari database.
- Dua hasil transaksi adalah commit atau rollback.
- Jika transaksi berjalan sukses maka dikatakan commit, sebaliknya jika transaksi tidak berjalan sukses maka transaksi ibatalkan dan kembali ke keadaan semula dikatakan rollback.
- Untuk menjamin transaksi-transaksi yang dilakukan bersamaan berjalan sukses tanpa adanya tumpang tindih maka dibutuhkan mekanisme pengontrolan konkurensi, jika tidak timbul permasalahan:
- Lost update
- Uncommited dependency
- Inconsistent analysis
PERMASALAHAN KONKUNRENSI
1. Lost update/kehilangan modifikasi.
Permasalahan timbul pada saat operasi update berjalan sukses kemudian
ditindih oleh operasi update lain yang dilakukan oleh pemakai lain.
T1
|
Waktu
|
T2
|
begin_transaction
read(x)
x=x-10
write(x)
commit
|
t1
t2
t3
t4
t5
t6
|
begin_transaction
read(x)
x=x+100
write(x)
commit
|
2. Uncommited
dependency/ketergantungan pada saat
belum commit
Permasalahan timbul pada saat transaksi dibiarkan
melihat hasil dari transasksi lain yang belum commit.
T1
|
Waktu
|
T2
|
begin_transaction
read(x)
x=x-10
write(x)
commit
|
t1
t2
t3
t4
t5
t6
t7
t8
|
begin_transaction
read(x)
x=x+100
write(x)
rollback
|
3. Inconsistent
analysis/analisis yang tidak konsisten
Permasalahan timbul
apabila suatu transaksi membaca beberapa nilai tetapi transasksi berikutnya
memodifikasi salah satu nilai.
T1
|
Waktu
|
T2
|
begin_transaction
read(x)
x=x-10
write(x)
read(z)
z=z+10
write(z)
commit
|
t1
t2
t3
t4
t5
t6
t7
t8
t9
t10
t11
|
begin_transaction
sum=0
read(x)
sum=sum+x
read(y)
sum=sum+y
read(z)
sum=sum+z
commit
|
TEHNIK PENGONTROLAN KONKURENSI
Tiga
tehnik pengontrolan konkurensi :
1.
Locking
Apabila suatu
transaksi mengakses suatu data maka suatu lock (kunci) dapat mencegah pengaksesan
oleh transasksi lain.
2.
Timestamping
Timestamping
merupakan suatu identitas waktu dimulainya suatu transasksi.
Timestamping mengatur prioritas transaksi berdasarkan
timestamp. Timestamp terkecil merupakan
transaksi paling duluan, jika terjadi konflik transaksi direstart.
3.
Optimistic
Konflik jarang
terjadi, semua transaksi dieksekusi dan pada saat commit, dicek kembali, jika
ada konflik transaksi direstart.
Matrik Locking
Konsep
dasar :
Ketika suatu transaksi memerlukan jaminan kalau record yang diingini
tidak akan berubah secara mendadak, maka diperlukan kunci untuk record
tersebut.
Fungsi
kunci (lock) adalah menjaga record tersebut agar tidak dimodifiksi transaksi
lain.
Cara
kerja dari kunci :
- Kita asumsikan terdapat 2 (dua) macam kunci :Kunci X (kunci eksklusif) dan kunci S (kunci yang digunakan bersama-sama)
- Jika transaksi A menggunakan kunci X pada record R, maka permintaan dari transaksi B harus menunggu sampai nanti transaksi A melepaskan kunci
- Jika transaksi A menggunakan kunci S pada record R, Maka :(a) Bila transaksi B ingin menggunakan kunci X, maka B harus menunggu sampai A melepaskan kunci tersebut.(b) Bila transaksi B ingin menggunakan kuni S, maka B bisa menggunakan kunci S bersama A
- Bila suatu transaksi hanya melakukan pembacaan saja, secara otomatis ia memerlukan kunci S.Bila transaksi tersebut ingin memodifikasi record, maka secara otomatis ia memerlukan kunci X.Bila transaksi tersebut sudah menggunakan kunci S, setelah itu ia akan memodifikasi record, maka kunci S akan dinaikkan ke level kunci X.
- Kunci X dan kunci S akan dilepaskan pada saat Synchpoint (synchronization point).
- Bila synchpoint ditetapkan maka:
- semua modifikasi program menjalankan operasi COMMIT atau ROLLBACK
- semua kunci dari record dilepaskan
Transaksi
A
X
|
S
|
-
|
|||
X
|
N
|
N
|
Y
|
||
S
|
N
|
Y
|
Y
|
||
-
|
Y
|
Y
|
Y
|
PENYELESAIAN MASALAH DENGAN LOCKING
1. Penyelesaian masalah lost update
T1
|
Waktu
|
T2
|
begin_transaction
read(x)
….. kunci S
x=x-10
WAIT
|
t1
t2
t3
t4
t5
|
begin_transaction
read(x)
….. kunci S
x=x+100
WAIT
WAIT
|
Penyelesaian masalah lost update dengan locking menimbulkan
deadlock dimana kedua transaksi sama-sama menunggu.
2. Penyelesaian masalah dengan uncommited dependency
T1
|
waktu
|
T2
|
begin_transaction
read(x)
WAIT
read(x)
….. kunci S
x=x-10
….. kunci X
write(x)
commit
|
t1
t2
t3
t4
t5
t6
t7
t8
t9
t10
|
begin_transaction
read(x)
….. kunci S
x=x+100
… kunci X
write(x)
rollback
|
3. Penyelesaian masalah inconsistent analysis
T1
|
Waktu
|
T2
|
begin_transaction
read(x)
….. kunci S
x=x-10
WAIT
|
t1
t2
t3
t4
t5
t6
|
begin_transaction
sum=0
read(x)
….. kunci S
sum=sum+x
WAIT
WAIT
|
Penyelesaian masalah dengan locking juga menimbulkan masalah deadlock.
0 komentar:
Posting Komentar