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
INSERTatauDELETE.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:
T1:
SELECT COUNT(*) FROM Karyawan WHERE dept = 'Riset'. (Hasil: 10 orang).T2:
INSERT INTO Karyawan (nama, dept) VALUES ('Budi', 'Riset').T2:
COMMIT.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 indexdeptuntuk 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 Isolasi Dirty Read (Baca data uncommitted) Non-Repeatable Read (Data yg dibaca berubah) Phantom Read (Ada baris baru) SERIALIZABLE Tidak Boleh Tidak Boleh Tidak Boleh REPEATABLE READ Tidak Boleh Tidak Boleh Boleh READ COMMITTED Tidak Boleh Boleh Boleh READ UNCOMMITTED Boleh Boleh Boleh Penjelasan:
Serializable: Paling kuat, paling aman, paling lambat. Dijamin tidak ada anomali.
Repeatable Read: Jaminan: Jika T baca data Q, lalu T baca lagi, Q dijamin nilainya sama. (Biasanya diimplementasikan pakai Snapshot Isolation di DB modern).
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).
Read Uncommitted: Paling lemah, paling cepat, paling berbahaya. T boleh membaca data “kotor” dari T2 yang belum commit.
Phantom Problem adalah anomali di mana hasil query berubah karena transaksi lain melakukan
INSERTatauDELETEbaris baru (baris “hantu”) yang cocok dengan kriteriaWHERE. 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), danREAD UNCOMMITTED(paling lemah, membolehkan dirty read).