Daftar Isi
Pengontrolan konkurensi merupakan salah satu fungsi dari DBMS
- Pada DBMS terpusat yang multi-user, mampu mengakses sejumlah transaksi pada waktu serempak.
- Transaction (transaksi) yakni sebuah agresi atau serangkaian agresi yang dijalankan oleh seorang pemakai atau suatu program aplikasi, dimana dapat mengakses atau mengganti isi dari database.
- Dua hasil transaksi yaitu commit atau rollback.
- Jika transaksi berjalan sukses maka dibilang commit, sebaliknya jika transaksi tidak berlangsung berhasil maka transaksi ibatalkan dan kembali ke kondisi semula dibilang rollback.
- Untuk menjamin transaksi-transaksi yang dijalankan bersama-sama berlangsung berhasil tanpa adanya tumpang tindih maka dibutuhkan prosedur pengontrolan konkurensi, kalau tidak timbul problem:
- Lost update
- Uncommited dependency
- Inconsistent analysis
PERMASALAHAN KONKUNRENSI
1. Lost update/kehilangan penyesuaian.
Permasalahan muncul pada saat operasi update berlangsung sukses lalu ditindih oleh operasi update lain yang dijalankan 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 ketika belum commit
Permasalahan muncul 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 selanjutnya 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 sebuah lock (kunci) mampu menghalangi pengaksesan oleh transasksi lain.
2. Timestamping
Timestamping merupakan sebuah identitas waktu dimulainya suatu transasksi.
Timestamping menertibkan prioritas transaksi menurut timestamp. Timestamp terkecil merupakan transaksi paling duluan, jikalau terjadi konflik transaksi direstart.
3. Optimistic
Konflik jarang terjadi, semua transaksi dihukum dan pada dikala commit, dicek kembali, bila ada pertentangan transaksi direstart.
Matrik Locking
Konsep dasar :
Ketika suatu transaksi membutuhkan jaminan jika record yang diingini tidak akan berubah secara mendadak, maka diharapkan kunci untuk record tersebut.
Fungsi kunci (lock) adalah menjaga record tersebut semoga 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 memakai kunci X pada record R, maka undangan dari transaksi B mesti menunggu hingga nanti transaksi A melepaskan kunci
-
Jika transaksi A memakai kunci S pada record R, Maka :(a) Bila transaksi B ingin menggunakan kunci X, maka B harus menunggu hingga 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 beliau memerlukan kunci S.Bila transaksi tersebut ingin memodifikasi record, maka secara otomatis beliau memerlukan kunci X.Bila transaksi tersebut sudah memakai kunci S, sehabis itu dia akan memodifikasi record, maka kunci S akan dinaikkan ke level kunci X.
- Kunci X dan kunci S akan dilepaskan pada ketika Synchpoint (synchronization point).
- Bila synchpoint ditetapkan maka:
- semua penyesuaian program mengerjakan 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 dilema 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 persoalan lost update dengan locking menjadikan deadlock dimana kedua transaksi sama-sama menanti.
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 problem dengan locking juga menyebabkan masalah deadlock.