Selasa, 10 Januari 2012
CONCURRENCY DAN LOCKING
Hai, kali ini aku akan membahas concurrency dan locking dalam DB2
Fenomena multi transaksi
Dibawah ini merupakan kesalahan yang dapat terjadi untuk sebuah aplikasi yang bersifat multi transaksi.
– lost update : jika ada 2 buah transaksi yang sedang membaca sebuah data dan kemudian mengupdatenya, maka salah satu update akan hilang / tertimpa.
- dirty read/ uncommited read : jika transaksi 1 mengupdate sebuah data dan kemudian transaksi 2 membaca data tersebut, maka jika transaksi 1 meroll back update tersebut, maka transaksi 2 akan melihat data yang salah.
– nonrepeatable read : jika transaksi 1 membaca data, kemudian transaksi 2 mengupdate / menghapus data, maka transaksi 1 akan mendapatkan hasil yang berbeda ketika melakukan pembacaan ulang.
– phantom : jika transaksi 1 melakukan pencarian dengan menggunakan key tertentu, kemudian transaksi 2 melakukan update data yang berkaitan dengan key tersebut, maka bila transaksi 1 melakukan pencarian ulang, akan didapatkan hasil yang berbeda
Isolation Level
Isolation merupakan salah 1 cara untuk mencegah terjadinya fenomena kesalahan yang disebutkan diatas.
– repeatable read : jika transaksi 1 melakukan pembacaan terhadap 1000 data, maka transaksi lain akan digagalkan untuk melakukan transaksi terhadap 1000 data tersebut walaupun transaksi 1 hanya ingin mengambil 10 data. Isolation level ini mencegah lost update, dirty read, non repeatable read dan phantom.
– read stability : jika transaksi 1 melakukan pembacaan terhadap 1000 data dan hanya ingin mengambil 10 data maka transaksi lain akan diperbolehkan untuk melakukan transaksi terhadap 990 data lainnya.
Isolation level ini mencegah lost update, dirty read, non repeatable read.
– cursor stability : isolation level ini hanya akan melock data yang ditunjuk oleh cursor. Mencegah dirty read.
– uncommitted read : isolation level ini hanya akan melock data jika ada transaksi lain yang ingin mendrop/ alter table
Locking
2 tipe lock
– share lock : dengan lock ini, transaksi lain dapat membaca data, namun tidak dapat melakukan perubahan sampai lock dilepas. Lock hanya dapat diberikan jika belum ada yang memegang. Lock ini diberikan jika ada yang melakukan pembacaan, sehingga menghindari perubahan data selama pembacaan
– exclusive lock : dengan lock ini, transaksi lain tidak dapat melakukan transaksi terhadap data. Lock ini diberikan jika ada yang melakukan update/ delete / insert.
Locking di DB2
- Lock compatible : jika transaksi 1 melock data, kemudian transaksi 2 ingin melock data tersebut, maka DB2 akan melihat kompatibilitasnya. Jika compatible maka lock akan diberikan ke transaksi 2, jika tidak transaksi 2 harus menunggu.
– Lock conversion : lock akan diubah secara otomatis jika berubah menjadi lebih ketat seperti dari shared lock ke exclusive lock
- Lock escalation : jika transaksi 1 sudah melakukan banyak lock pada row dan melebihi maxlock yang diperbolehkan, maka lock dapat dieskalasi menjadi lock table. Hal ini berguna agar tidak menghabiskan memory.
Semoga bermanfaat.
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar