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

  1. Awal: Saldo rekening A = Rp 1.000.000.

  2. T1 (Transfer): read(A). T1 melihat A = 1.000.000.

  3. T2 (Tarik Tunai): read(A). T2 juga melihat A = 1.000.000.

  4. T1: Menghitung A = A - 100.000 (menjadi 900.000).

  5. T2: Menghitung A = A - 200.000 (menjadi 800.000).

  6. T1: write(A). Saldo A di database menjadi Rp 900.000.

  7. 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:

  1. Shared (lock-S) / Kunci Bersama:

    • Tujuan: Untuk Membaca data.

    • Aturan: Jika transaksi T memegang lock-S pada data Q, T diizinkan untuk read(Q), tetapi tidak diizinkan untuk write(Q).

    • Sifat: Shared (Bersama) berarti beberapa transaksi bisa memegang lock-S pada item data yang sama secara bersamaan. (Contoh: Banyak orang boleh membaca artikel koran yang sama pada saat yang sama).

  2. Exclusive (lock-X) / Kunci Eksklusif:

    • Tujuan: Untuk Menulis (dan Membaca) data.

    • Aturan: Jika transaksi T memegang lock-X pada data Q, T diizinkan untuk read(Q) dan write(Q).

    • Sifat: Exclusive (Eksklusif) berarti hanya satu transaksi yang boleh memegang lock-X pada 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)BolehTunggu
X (T1 holds)TungguTunggu

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-S dan lock-X saja 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.

  1. Lock Upgrade (S X):

    • Skenario: Sebuah transaksi T awalnya hanya read(Q), jadi ia mendapatkan lock-S. Namun, di tengah jalan, T sadar ia juga perlu write(Q).

    • Tindakan: T akan meminta upgrade kuncinya dari lock-S menjadi lock-X.

    • Aturan: Permintaan upgrade ini hanya bisa dikabulkan jika T adalah satu-satunya transaksi yang memegang lock-S pada Q. Jika ada transaksi lain (misal T2) yang juga sedang memegang lock-S, maka T harus menunggu T2 melepaskan kuncinya terlebih dahulu.

  2. Lock Downgrade (X S):

    • Skenario: Transaksi T sudah selesai melakukan write(Q) (dengan lock-X), tetapi masih perlu read(Q) untuk beberapa waktu dan tidak akan menulis lagi.

    • Tindakan: T bisa melakukan downgrade kuncinya dari lock-X ke lock-S.

    • Keuntungan: Ini memungkinkan transaksi lain yang menunggu untuk read(Q) agar bisa segera mendapatkan lock-S mereka, sehingga meningkatkan konkurensi.

Summary

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.