Tutorial 8 - IBMDB2

Concurrency and Locking


Concurrency
  • DB2 dirancang untuk database banyak pengguna. Akses pada data harus dikoordinasikan secara baik dan transparan menggunakan mekanisme untuk meyakinkan kesatuan dan konsistensi data.
  • Tanpa banyak bentuk dari kontrol concurrency,masalah yang akan timbul yaitu :
-  Lost update
-  Uncommitted read
-  Non-repeatable read
-  Phantom read

Locking
  • DB2 menggunakan locking untuk merawat kesatuan data.Lock dapat dipasang secara otomatis ketika dibutuhkan untuk mendukung transaksi dan dilepaskan ketika transaksi selesai (COMMIT/ROLLBACK). Lock dapat dipasang pada tabel atau baris.
  • Dua tipe dasar kunci :
-  Share locks (S locks) –didapat ketika aplikasi ingin membaca dan menghindarkan yang lain dari mengupdate baris yang sama.
-  Exclusive locks (X locks) –didapat ketika applicasi update,insert atau menghapus baris.

Isolation Levels
  • DB2 menyediakan tinggatan proteksi berbeda untuk isolasi data
-  Uncommitted Read (UR)
-  Cursor Stability (CS)
-  Read Stability (RS)
-  Repeatable Read (RR)
  • Level Isolation level dapat dispesifikasikan di banyak tingkatan
-  Session (application).  Defaults to CS(Cursor Stability)
-  Koneksi
-  Perintah
  • Untuk embedded SQL,level di set pada waktu bind
  • Untuk dynamic SQL, level di set pada waktu run

Isolation Levels – Uncommitted Read
  • Uncommitted Read dikenal juga sebagai DIRTY READ
-  Level paling rendah dari isolation
-  Menyediakan tingkatan tertinggi dari concurrency yaitu tidak ada penguncian baris yang didapat pada operasi baca jika tidak aplikasi lain akan mencoba untuk drop atau alter tabel tersebut.Operasi update bertindak jika menggunakan Cursor Stability
  • Situasi yang Mungkin : Uncommitted Read,Non-repeatable Read, Phantom Read
  • Situasi yang bisa dihindari : Loss of Update

Isolation Levels – Cursor Stability
  • Cursor Stability adalah level isolation biasa
-  Tingkatan locking Minimal
-  Mengunci cursor baris sekarang
-  Jika baris hanya membaca: kunci akan dipegang sampai baris baru di fetch atau unit kerja dihilangkan/dihapus
-  Jika baris diupdate : kunci dipegang sampai unit kerja selesai/dihilangkan.
  • Situasi yang mungkin :Non-repeatable Read dan Phantom Read
  • Situasi yang dapat dihindari :Loss of Update dan Uncommitted Read

Isolation Levels – Read Stability
Mengunci semua baris aplikasi yang mengambil di dalam unit kerja.Untuk cursor yang diberikan, Ini mengunci semua baris yang kualitas untuk result set dan ini merupakan tingkatan locking yang menengah.
  • Situasi yang mungkin : Phantom Read
  • Situasi yang dapat dihindari : Loss of Update,Uncommitted Read, dan Non-repeatable Read

Isolation Levels – Repeatable Read
  • Level isolasi tertinggi, concurrency tersedikit.Query yang sama diisukan oleh aplikasi lebih dari sekali dalam unit kerja akan memberi hasil yang sama setiap waktu. Tingkatan penguncian yang tinggi, Kunci dipegang pada semua baris yang di proses untuk membangun result set contohnya baris yang tidak diperlukan dalam hasil akhir set akan dikunci dan tidak ada aplikasi lain yang bisa update,delete atau insert baris yang dapat mempengaruhi result set sampai unit kerja selesai.
  • Situasi yang mungkin : tidak ada
  • Situasi yang bisa dihindari :Loss of Update,Uncommitted Read,Non-repeatable Read,Phantom Read

Statement Level Isolation
SELECT ... WITH {UR | CS | RS | RR}
            UR = Uncommitted Read
            CS = Cursor Stability
            RS = Read Stability
            RR = Repeatable Read

Lock Escalation
  • Ketika optimizer berpikir ini lebih baik mempunyai satu kunci pada semua tabel, daripada banyak baris kunci.
  • Parameter configurasi Database yang mempengaruhi lock escalation:
-  LOCKLIST –jumlah memori(halaman 4k)untuk mengatur kunci untuk semua aplikasi yang terhubung.Yang biasanya adalah 50*halaman 4K pada windows
-  MAXLOCKS –Persentasi maksimal dari semua daftar kunci yang aplikasi satuan dapat gunakan.Yang telah ada biasanya 22 persen
  • Jika nilai biasa yang digunakan, lock escalation terjadi ketika satu aplikasi membutuhkan lebih dari 44K memori kunci.Jika lock escalation, meningkatkan nilai LOCKLIST and MAXLOCKS.Menghindari lock escalations : Performa bottleneck.Memeriksa file log diagnosis DB2

Lock Wait
  • Diatur biasanya, aplikasi menunggu tak terbatas untuk mendapat kunci yang dibutuhkan.
  • LOCKTIMEOUT (db cfg):nilai biasa adalah -1 atau waktu tak terbatas(infinite wait).Perubahan untuk menspesifikasi jumlah waktu untuk menunggu kunci
  • Koneksi database juga mempunyai daftar yang dapat didefinisikan user yaitu CURRENT LOCK TIMEOUT: biasanya menurunkan nilai dari parameter.Menggunakan perintah SET LOCK TIMEOUT untuk mengubah nilainya. Ketika telah diset koneksinya, ini hadir melewati transaksi
-  contohnya. SET LOCK TIMEOUT=WAIT n

Deadlock Settings
  • Deadlocks adalah isu rancangan aplikasi kebanyakan waktu ini.
  • DLCHKTIME (db cfg)  mengatur interval waktu untuk memerisa deadlocks. DLCHKTIME mendefinisikan frekuensi bahwa manager database memeriksa untuk deadlocks diantara semua aplikasi yang dihubungkan ke database
  • Jika anda berpengalaman dengan banyak deadlock, anda harus memeriksa ulang transaksi ulang anda yang telah ada dan lihat apakah menstrukturkan ulang itu mungkin.

Comments