Back to IF3140 Sistem Basis Data

5.2: Fenomena Lanjutan & Konsistensi Lemah

Questions/Cues

  • Apa masalah INSERT & DELETE?

  • Apa itu Phantom Problem?

  • Mengapa lock baris tidak cukup?

  • Apa solusi Phantom?

  • Apa itu Index-Range Locking?

  • Apa itu Weak Levels of Consistency?

  • Level SERIALIZABLE?

  • Level REPEATABLE READ?

  • Level READ COMMITTED?

  • Level READ UNCOMMITTED?

Reference Points

  • Slides “11 - Concurrency Control - 4.pdf” (Hal 16-29)

Masalah: Phantom Problem (Fenomena Hantu)

Locking standar pada item data (baris) tidak cukup untuk menangani operasi INSERT atau DELETE.

Definisi Phantom Problem:

Sebuah transaksi T1 menjalankan query yang sama dua kali, namun mendapatkan hasil yang berbeda karena transaksi T2 melakukan INSERT atau DELETE data baru yang “cocok” dengan kriteria WHERE dari T1.

Contoh:

  1. T1: SELECT COUNT(*) FROM Karyawan WHERE dept = 'Riset'. (Hasil: 10 orang).

  2. T2: INSERT INTO Karyawan (nama, dept) VALUES ('Budi', 'Riset').

  3. T2: COMMIT.

  4. T1: (Masih berjalan) SELECT COUNT(*) FROM Karyawan WHERE dept = 'Riset'. (Hasil: 11 orang).

Masalah: Hasil T1 tidak konsisten (non-repeatable). Baris “Budi” adalah baris “hantu” (phantom) yang tiba-tiba muncul.

Solusi: Index-Range Locking

Lock pada baris data saja tidak cukup, karena baris “Budi” belum ada saat T1 query pertama.

Solusi: Transaksi T1 harus mengunci index yang digunakan untuk query.

  • Saat T1 menjalankan ... WHERE dept = 'Riset', sistem akan mengunci “range” pada index dept untuk nilai ‘Riset’.

  • Saat T2 mencoba INSERT ... 'Riset', ia harus meminta lock pada index ‘Riset’ tersebut.

  • T2 akan di-block (menunggu) sampai T1 selesai (commit atau abort).

Weak Levels of Consistency (Level Konsistensi Lemah)

Standar SQL mendefinisikan level isolasi sebagai trade-off antara konsistensi (akurasi) dan performa (konkurensi).

Level IsolasiDirty Read (Baca data uncommitted)Non-Repeatable Read (Data yg dibaca berubah)Phantom Read (Ada baris baru)
SERIALIZABLETidak BolehTidak BolehTidak Boleh
REPEATABLE READTidak BolehTidak BolehBoleh
READ COMMITTEDTidak BolehBolehBoleh
READ UNCOMMITTEDBolehBolehBoleh

Penjelasan:

  1. Serializable: Paling kuat, paling aman, paling lambat. Dijamin tidak ada anomali.

  2. Repeatable Read: Jaminan: Jika T baca data Q, lalu T baca lagi, Q dijamin nilainya sama. (Biasanya diimplementasikan pakai Snapshot Isolation di DB modern).

  3. Read Committed: (Default di banyak DB, misal PostgreSQL). Jaminan: T hanya membaca data yang sudah di-commit. TAPI, jika T baca Q=10, lalu T2 commit Q=20, lalu T baca lagi, T akan melihat Q=20 (non-repeatable).

  4. Read Uncommitted: Paling lemah, paling cepat, paling berbahaya. T boleh membaca data “kotor” dari T2 yang belum commit.

Summary

Phantom Problem adalah anomali di mana hasil query berubah karena transaksi lain melakukan INSERT atau DELETE baris baru (baris “hantu”) yang cocok dengan kriteria WHERE. Solusinya bukan mengunci data, melainkan mengunci range pada index (Index-Range Locking). Untuk performa, SQL menyediakan Weak Levels of Consistency sebagai trade-off: SERIALIZABLE (paling kuat), REPEATABLE READ (mencegah non-repeatable read, sering di-implementasi sebagai Snapshot Isolation), READ COMMITTED (hanya mencegah dirty read, level default), dan READ UNCOMMITTED (paling lemah, membolehkan dirty read).