¥ 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:
1. Lost
update
2. Uncommited
dependency
3. 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 :
1. Kita
asumsikan terdapat 2 (dua) macam kunci :
Kunci X (kunci eksklusif) dan
kunci S (kunci yang digunakan bersama-sama)
2. Jika
transaksi A menggunakan kunci X pada record R, maka permintaan dari transaksi B
harus menunggu sampai nanti transaksi A melepaskan kunci
3. 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
4. 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.
5. 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