Back to IF3140 Sistem Basis Data
1.3: Multiple Granularity
Questions/Cues
Apa itu Granularity?
Apa trade-off granularitas?
Apa solusi trade-off ini?
Apa itu Intention Lock?
Apa saja jenis Intention Lock?
Apa itu Intention Shared (IS)?
Apa itu Intention Exclusive (IX)?
Apa itu Shared Intention Exclusive (SIX)?
Bagaimana Matriks Kompatibilitas MG?
Apa aturan Protokol Hirarki?
Reference Points
- Slides “11 - Concurrency Control - 2.pdf” (Hal 10-16)
Apa itu Granularity (Granularitas)?
Granularitas mengacu pada “ukuran” dari item data yang dapat kita kunci. Dalam basis data, data diorganisir dalam sebuah hirarki.
Hirarki Granularitas (dari kasar ke halus):
Basis Data (Keseluruhan)
Tabel
Halaman (Page) atau Blok Fisik
Baris (Row) atau Tupel
Atribut (Field)
Trade-off Granularitas
Memilih tingkat granularitas yang “tepat” adalah sebuah trade-off antara biaya overhead dan tingkat konkurensi.
Granularitas Kasar (Coarse)
- Contoh: Mengunci seluruh Tabel.
- Overhead: Rendah. Jika transaksi T butuh 1000 baris, ia hanya butuh 1 lock (di level tabel).
- Konkurensi: Rendah. Selama T mengunci tabel, tidak ada transaksi lain yang bisa mengakses baris apapun di tabel itu, meskipun barisnya berbeda.
- Cocok untuk: Transaksi batch yang mengakses >50% data tabel.
Granularitas Halus (Fine)
- Contoh: Mengunci per Baris.
- Overhead: Tinggi. Jika T butuh 1000 baris, ia butuh 1000 lock terpisah, yang memakan memori dan waktu Lock Manager.
- Konkurensi: Tinggi. T1 dan T2 bisa bekerja pada baris yang berbeda di dalam tabel yang sama secara bersamaan.
- Cocok untuk: Transaksi OLTP singkat (misal, transfer uang, update 1 data).
Solusi: Multiple Granularity (MG)
Ide-nya adalah mengizinkan sistem untuk mengunci pada level manapun yang paling efisien, tergantung kebutuhan transaksi.
Masalah: Bagaimana jika T1 mengunci seluruh Tabel (lock-X), lalu T2 mencoba mengunci Baris 5 di tabel itu? Lock Manager harusnya tahu bahwa Baris 5 sudah terkunci (secara implisit) oleh T1. Mengecek seluruh hirarki ke atas setiap kali ada permintaan lock sangatlah lambat.
Solusi: Kita butuh lock jenis baru.
Intention Locks (Kunci Niat)
Intention Lock adalah lock penanda yang ditempatkan pada node atas (kasar) untuk menandakan bahwa ada lock eksplisit (S atau X) yang sedang atau akan dipasang pada node bawah (halus).
Tujuannya: Efisiensi. Jika T2 mau
lock-Xdi Tabel, ia cukup cek lock di level Tabel. Jika adaISatauIXdi sana, ia tahu ada lock di bawah dan harus tunggu. Ia tidak perlu scan jutaan baris.Jenis-Jenis Kunci dalam Protokol MG:
Shared (S): Kunci baca (seperti biasa).
Exclusive (X): Kunci tulis (seperti biasa).
Intention Shared (IS): Niat untuk memasang lock-S di level yang lebih rendah. (Contoh: Pasang
ISdi Tabel, lalu pasangSdi beberapa Baris).Intention Exclusive (IX): Niat untuk memasang lock-X di level yang lebih rendah. (Contoh: Pasang
IXdi Tabel, lalu pasangXdi beberapa Baris).Shared Intention Exclusive (SIX):
Ini adalah lock hibrida yang kuat.
Artinya: Transaksi ini membaca seluruh sub-hirarki (setara
Sdi level ini) DAN berniat meng-update beberapa item di bawah (setaraIX).Contoh Skenario: “Scan seluruh tabel Gaji (
Sdi tabel) dan beri kenaikan gaji (Xdi baris) untuk 10 orang”.Matriks Kompatibilitas Multiple Granularity
Matriks ini jauh lebih kompleks.
(T1 holds) IS IX S SIX X IS Boleh Boleh Boleh Boleh Tunggu IX Boleh Boleh Tunggu Tunggu Tunggu S Boleh Tunggu Boleh Tunggu Tunggu SIX Boleh Tunggu Tunggu Tunggu Tunggu X Tunggu Tunggu Tunggu Tunggu Tunggu Logika Penting:
ISvsIX(Boleh): Niatnya tidak konflik. Konflik sesungguhnya (jika ada) akan ditangani di level baris.
IXvsS(Tunggu):Ssedang membaca seluruh tabel, sementaraIXberniat menulis di salah satu baris. Ini konflik.
X (Exclusive) selalu konflik dengan apapun (kecuali tidak ada lock).
S (Shared) hanya boleh barengan sama yang punya unsur “Baca” (IS dan S lainnya).
IX (Intention Exclusive) hanya boleh barengan sama sesama “Intention” (IS dan IX lainnya).
SIX itu egois karena dia gabungan S dan IX. Dia cuma kasih izin buat orang yang mau baca sedikit (IS).
Protokol Locking Hirarki MG
Semua transaksi harus mematuhi Matriks Kompatibilitas.
Permintaan lock harus dilakukan secara Top-Down (dari akar/database ke daun/baris).
Pelepasan lock harus dilakukan secara Bottom-Up (dari daun/baris ke akar/database).
Aturan Request (Top-Down):
Untuk mendapat
lock-SatauISpada node N, transaksi harus sudah memegangISatauIXpadaparent(N).Untuk mendapat
lock-X,IX, atauSIXpada node N, transaksi harus sudah memegangIXatauSIXpadaparent(N).Contoh Alur:
Transaksi T mau lock-X pada Baris R di dalam Tabel Tbl.
T minta
lock-IXdi Database. (Diberikan).T minta
lock-IXdi Tabel Tbl. (Harus cek kompatibilitas di Tbl. Diberikan).T minta
lock-Xdi Baris R. (Harus cek kompatibilitas di R. Diberikan).
Granularitas adalah ukuran data yang dikunci (misal, Tabel vs Baris), yang memiliki trade-off antara overhead dan konkurensi (Kasar: overhead rendah, konkurensi rendah; Halus: sebaliknya). Solusinya adalah Multiple Granularity (MG), yang mengizinkan lock di berbagai level. Agar efisien, MG menggunakan Intention Lock (kunci niat) di level atas sebagai penanda (seperti
IS- niat baca,IX- niat tulis,SIX- baca semua & tulis sebagian). Protokol ini mengharuskan lock diminta secara Top-Down (dari Database ke Baris) dan dilepas secara Bottom-Up, sambil mematuhi Matriks Kompatibilitas yang baru.
Additional Information
Pendalaman: Kapan Menggunakan SIX?
Kunci
SIX(Shared Intention Exclusive) adalah kunci yang sangat spesifik namun kuat. Bayangkan skenario berikut:Perintah SQL:
UPDATE Gaji SET total = total * 1.05 WHERE departemen = 'Riset';Analisis:
Basis data perlu membaca setiap baris di tabel
Gajiuntuk mengecek kolomdepartemen. Ini adalah operasi Shared (S) di seluruh tabel.Untuk baris yang
departemen = 'Riset', basis data perlu menulis nilai baru. Ini adalah operasi Exclusive (X) di beberapa baris.Strategi Locking:
Opsi 1 (Lock X di Tabel): Terlalu ketat. Tidak ada transaksi lain yang bisa membaca gaji departemen ‘Sales’ selagi operasi ini berjalan. Konkurensi buruk.
Opsi 2 (Lock IX di Tabel, lalu X di Baris): Bisa, tapi kurang efisien. Ini tidak memberitahu transaksi lain bahwa kita sedang membaca seluruh tabel. Transaksi lain (misal T2) bisa saja mendapat
lock-ISdi tabel, lalulock-Sdi baris departemen ‘Sales’.Opsi 3 (Lock S di Tabel): Tidak bisa. Ini akan gagal saat kita mencoba
upgradekelock-Xdi baris ‘Riset’ (karena butuhIXdi tabel).Opsi 4 (Lock SIX di Tabel): Paling efisien.
SdiSIXmengunci seluruh tabel untuk dibaca, mencegah transaksi lain (T2) mendapatkanlock-Xdi tabel.
IXdiSIXmemberi “niat” untuk menulis, mengizinkan transaksi ini mendapatkanlock-Xdi level baris.Ini mengizinkan transaksi lain (T3) untuk mendapatkan
lock-ISdi tabel danlock-Sdi baris lain (misal departemen ‘Sales’) secara bersamaan.