Back to IF3140 Sistem Basis Data
1.1: Pengantar Concurrency Control & Jenis Kunci
Questions/Cues
Mengapa perlu CC?
Apa itu Lock?
Apa itu Lock-Based Protocol?
Apa saja jenis Kunci (Lock)?
Apa itu Lock-S (Shared)?
Apa itu Lock-X (Exclusive)?
Apa itu Lock Compatibility?
Apa itu Locking Protocol?
Apa itu Lock Upgrade?
Reference Points
- Slides “11 - Concurrency Control - 1.pdf” (Hal 5-10, 17-18)
Latar Belakang: Masalah Konkurensi
Dalam sistem basis data, beberapa transaksi (operasi pengguna) bisa berjalan secara bersamaan (konkuren) untuk meningkatkan performa.
Masalah: Jika beberapa transaksi mengakses (membaca/menulis) item data yang sama secara bersamaan tanpa aturan, ini dapat menyebabkan inkonsistensi data atau anomali.
Contoh Anomali: Lost Update Problem
Awal: Saldo rekening A = Rp 1.000.000.
T1 (Transfer):
read(A). T1 melihat A = 1.000.000.T2 (Tarik Tunai):
read(A). T2 juga melihat A = 1.000.000.T1: Menghitung
A = A - 100.000(menjadi 900.000).T2: Menghitung
A = A - 200.000(menjadi 800.000).T1:
write(A). Saldo A di database menjadi Rp 900.000.T2:
write(A). Saldo A di database menjadi Rp 800.000.Hasil: Operasi T1 (transfer 100.000) HILANG. Ini tidak bisa diterima.
Apa itu Lock (Kunci)?
Lock adalah mekanisme kontrol akses yang paling umum digunakan.
Bayangkan lock sebagai sebuah “penanda” atau “bendera” yang terkait dengan setiap item data di database (misalnya, satu baris data atau satu tabel).
Sebelum sebuah transaksi diizinkan untuk mengakses (membaca atau menulis) sebuah item data, ia harus terlebih dahulu meminta (request) dan mendapatkan (grant) kunci untuk item data tersebut dari sistem (disebut Lock Manager).
Apa itu Lock-Based Protocol?
Ini adalah pendekatan Concurrency Control (CC) di mana kita menggunakan kunci (locks) untuk memastikan eksekusi yang serializable (terisolasi dan konsisten).
Ide dasarnya: Setiap transaksi harus mendapatkan kunci pada data sebelum mengaksesnya. Jika data sudah dikunci oleh transaksi lain dengan cara yang tidak kompatibel, transaksi yang meminta harus menunggu (wait).
Jenis-Jenis Kunci Utama
Ada dua mode kunci dasar yang digunakan:
Shared (lock-S) / Kunci Bersama:
Tujuan: Untuk Membaca data.
Aturan: Jika transaksi T memegang
lock-Spada data Q, T diizinkan untukread(Q), tetapi tidak diizinkan untukwrite(Q).Sifat: Shared (Bersama) berarti beberapa transaksi bisa memegang
lock-Spada item data yang sama secara bersamaan. (Contoh: Banyak orang boleh membaca artikel koran yang sama pada saat yang sama).Exclusive (lock-X) / Kunci Eksklusif:
Tujuan: Untuk Menulis (dan Membaca) data.
Aturan: Jika transaksi T memegang
lock-Xpada data Q, T diizinkan untukread(Q)danwrite(Q).Sifat: Exclusive (Eksklusif) berarti hanya satu transaksi yang boleh memegang
lock-Xpada item data Q pada satu waktu. Tidak ada transaksi lain yang boleh memegang kunci apapun (baik S maupun X) pada Q.Matriks Kompatibilitas Kunci (Lock Compatibility)
Matriks ini menentukan apakah permintaan kunci baru (
lock request) dari Transaksi T2 dapat dikabulkan jika Transaksi T1 sudah memegang kunci (lock held) pada data yang sama.
(T1 holds) S (T2 req) X (T2 req) S (T1 holds) Boleh Tunggu X (T1 holds) Tunggu Tunggu Penjelasan (Wajib Paham):
S-S (Boleh): Jika T1 sedang membaca (S), T2 juga boleh ikut membaca (S). Ini tidak menimbulkan konflik.
S-X (Tunggu): Jika T1 sedang membaca (S), T2 tidak boleh menulis (X). T2 harus menunggu T1 selesai membaca dan melepaskan kuncinya.
X-S (Tunggu): Jika T1 sedang menulis (X), T2 tidak boleh membaca (S). T2 harus menunggu T1 selesai menulis agar tidak membaca data yang “setengah jadi” (dirty read).
X-X (Tunggu): Jika T1 sedang menulis (X), T2 jelas tidak boleh ikut menulis (X).
Apa itu Locking Protocol?
Sebuah Protokol adalah seperangkat aturan yang harus dipatuhi oleh semua transaksi.
Aturan ini mendefinisikan kapan sebuah transaksi harus meminta kunci (
lock) dan kapan ia boleh melepaskan kunci (unlock).Penting: Hanya menggunakan
lock-Sdanlock-Xsaja TIDAK CUKUP untuk menjamin serializability. Kita butuh protokol yang ketat, yang paling terkenal adalah Two-Phase Locking (akan dibahas di catatan 1.2).Konversi Kunci (Lock Conversion)
Seringkali sebuah transaksi perlu mengubah jenis kunci yang dipegangnya.
Lock Upgrade (S → X):
Skenario: Sebuah transaksi T awalnya hanya
read(Q), jadi ia mendapatkanlock-S. Namun, di tengah jalan, T sadar ia juga perluwrite(Q).Tindakan: T akan meminta upgrade kuncinya dari
lock-Smenjadilock-X.Aturan: Permintaan upgrade ini hanya bisa dikabulkan jika T adalah satu-satunya transaksi yang memegang
lock-Spada Q. Jika ada transaksi lain (misal T2) yang juga sedang memeganglock-S, maka T harus menunggu T2 melepaskan kuncinya terlebih dahulu.Lock Downgrade (X → S):
Skenario: Transaksi T sudah selesai melakukan
write(Q)(denganlock-X), tetapi masih perluread(Q)untuk beberapa waktu dan tidak akan menulis lagi.Tindakan: T bisa melakukan downgrade kuncinya dari
lock-Xkelock-S.Keuntungan: Ini memungkinkan transaksi lain yang menunggu untuk
read(Q)agar bisa segera mendapatkanlock-Smereka, sehingga meningkatkan konkurensi.
Untuk mencegah anomali data akibat eksekusi konkuren (seperti Lost Update Problem), Lock-Based Protocol digunakan sebagai mekanisme kontrol. Mekanisme ini bergantung pada Kunci (Locks), yaitu penanda pada item data. Terdapat dua jenis kunci utama: Shared (lock-S) untuk operasi baca (bisa digunakan bersamaan) dan Exclusive (lock-X) untuk operasi tulis (hanya boleh satu transaksi). Interaksi antar kunci ini diatur oleh Matriks Kompatibilitas (S-S boleh, lainnya harus tunggu). Sebuah Locking Protocol adalah seperangkat aturan ketat tentang kapan harus meminta, melepaskan, atau meng-konversi (misal upgrade S ke X) kunci untuk menjamin konsistensi data.
Additional Information
Pendalaman: Implementasi Lock Manager & Lock Table
Di dalam sistem DBMS, ada sebuah komponen (proses) terpisah yang disebut Lock Manager. Tugasnya adalah mengelola semua permintaan lock dan unlock dari semua transaksi.
Lock Manager memelihara sebuah struktur data di memori yang disebut Lock Table.
Struktur Lock Table: Ini pada dasarnya adalah sebuah Hash Table atau Tree.
Key: Kunci dari tabel ini adalah identifier dari item data yang sedang dikunci (misal, ID baris, ID halaman).
Value: Untuk setiap item data, Lock Table menyimpan informasi berikut:
Jenis Kunci yang Diberikan: Tipe kunci apa yang sedang aktif (S, X, atau mungkin tidak ada).
Daftar Transaksi (Granted): Transaksi mana saja yang sedang memegang kunci tersebut. (Bisa lebih dari satu jika kuncinya Shared).
Antrian Tunggu (Waiting Queue): Daftar transaksi yang sedang menunggu untuk mendapatkan kunci pada data ini, beserta mode kunci yang mereka minta (S atau X). Ini biasanya diimplementasikan sebagai antrian (FIFO - First In First Out) untuk menjamin fairness.
Proses:
Transaksi T1 mengirim pesan
Request(lock-X, Q)ke Lock Manager.Lock Manager mengecek Lock Table untuk data Q.
Kasus 1 (Data Q bebas): Lock Manager memberikan
lock-Xke T1, mencatatnya di Lock Table, dan mengirim pesanGrantke T1. T1 lanjut berjalan.Kasus 2 (Data Q sudah di-lock-S oleh T2): Lock Manager melihat permintaan
lock-Xdari T1 tidak kompatibel. T1 dimasukkan ke dalam Waiting Queue untuk data Q. T1 akan di-blokir (tidur) sampai T2 melepaskan kuncinya.Eksplorasi Mandiri: Biaya (Overhead) dari Locking
Menggunakan lock tidak gratis. Ini menimbulkan overhead (beban kerja tambahan) pada sistem:
Overhead Komunikasi: Waktu yang dibutuhkan transaksi untuk mengirim pesan request/release ke Lock Manager dan menerima balasan grant.
Overhead Manajemen: Waktu dan memori yang digunakan Lock Manager untuk mengelola Lock Table (mencari, menyisipkan, menghapus entri).
Overhead Blocking: Ini adalah biaya terbesar. Waktu yang dihabiskan oleh sebuah transaksi untuk menunggu kunci dilepaskan oleh transaksi lain. Semakin banyak blocking, semakin rendah throughput (jumlah transaksi yang bisa diselesaikan per detik).
Sumber & Referensi Lanjutan:
- Buku Teks: Silberschatz, Korth, and Sudarshan, “Database System Concepts” (Edisi 7), Chapter 18. (Ini adalah sumber utama dari slide Anda).