Back to IF3140 Sistem Basis Data
Implementasi Isolasi
Questions/Cues
Apa saja 3 teknik utama implementasi isolasi?
Bagaimana cara kerja Locking?
Apa beda Shared Lock vs Exclusive Lock?
Bagaimana cara kerja Timestamps?
Apa itu Read/Write Timestamp?
Bagaimana cara kerja Multiple Versions (MVCC)?
Apa itu Predicate Locking?
Reference Points
- Slides 39-40
Implementasi Level Isolasi
Untuk menegakkan level isolasi dan menjamin serializability, sistem basis data menggunakan protokol kontrol konkurensi. Tiga pendekatan utama yang digunakan adalah:
Locking (Penguncian)
Timestamps (Pemberian Cap Waktu)
Multiple Versions (Penyimpanan Versi Ganda)
1. Protokol Berbasis Locking
Ini adalah pendekatan yang paling intuitif dan umum digunakan.
Konsep: Sebuah transaksi harus meminta dan mendapatkan “kunci” (lock) pada sebuah item data sebelum diizinkan melakukan operasi (baca/tulis). Transaksi lain yang ingin mengakses data tersebut dengan cara yang berkonflik harus menunggu hingga kunci dilepaskan.
Jenis Lock:
Shared Lock (S-lock): Diperlukan untuk operasi
read. Beberapa transaksi dapat memegang S-lock pada item yang sama secara bersamaan.Exclusive Lock (X-lock): Diperlukan untuk operasi
write. Jika satu transaksi memegang X-lock, tidak ada transaksi lain yang bisa mendapatkan lock jenis apa pun (baik S-lock maupun X-lock) pada item tersebut.Aspek Penting Lainnya:
Granularity: Seberapa besar unit data yang dikunci? (Misalnya, satu baris, satu halaman memori, atau seluruh tabel).
Duration: Berapa lama kunci dipegang? (Biasanya hingga transaksi selesai dengan
COMMITatauROLLBACK).2. Protokol Berbasis Timestamps
Konsep: Setiap transaksi diberi cap waktu (timestamp) unik saat dimulai. Sistem menggunakan cap waktu ini untuk mengurutkan eksekusi transaksi. Jika ada operasi yang melanggar urutan waktu ini, maka operasi tersebut akan ditolak.
Mekanisme:
Setiap item data di basis data menyimpan
Write-timestamp(cap waktu dari transaksi terakhir yang menulisnya) danRead-timestamp(cap waktu dari transaksi terakhir yang membacanya).Ketika sebuah transaksi mencoba mengakses data, sistem membandingkan cap waktu transaksi tersebut dengan cap waktu pada data untuk memastikan urutan serial tetap terjaga. Jika terdeteksi konflik (misalnya, transaksi yang lebih “muda” mencoba menimpa data yang sudah dibaca oleh transaksi yang lebih “tua”), transaksi yang melanggar akan dibatalkan (rolled back).
3. Protokol Berbasis Multiple Versions (MVCC)
MVCC (Multi-Version Concurrency Control) adalah pendekatan canggih yang meningkatkan performa secara signifikan.
Konsep: Alih-alih satu data ditimpa oleh perubahan, sistem menyimpan beberapa versi dari sebuah item data. Setiap versi memiliki informasi tentang transaksi yang menciptakannya.
Mekanisme:
Operasi Read: Ketika sebuah transaksi ingin membaca data, sistem akan memberikannya “snapshot” atau versi data yang konsisten pada saat transaksi tersebut dimulai.
Operasi Write: Ketika sebuah transaksi ingin menulis data, ia akan membuat versi baru dari data tersebut, tanpa mengganggu transaksi lain yang mungkin sedang membaca versi lama.
Keuntungan Utama: Pembaca tidak memblokir penulis, dan penulis tidak memblokir pembaca. Ini mengurangi waktu tunggu dan meningkatkan konkurensi.
Untuk mengelola eksekusi konkuren, sistem basis data mengandalkan protokol utama seperti Locking, yang mengunci data untuk mencegah konflik; Timestamping, yang mengurutkan transaksi berdasarkan cap waktu untuk mendeteksi pelanggaran urutan; dan Multi-Version Concurrency Control (MVCC), yang menyimpan beberapa versi data untuk memungkinkan operasi baca dan tulis berjalan bersamaan tanpa saling memblokir. Setiap metode menawarkan trade-off antara kompleksitas implementasi, performa, dan tingkat konkurensi.
Additional Information
Predicate Locking untuk Mencegah Phantom Reads
Phantom Read terjadi ketika sebuah transaksi melihat baris data baru yang disisipkan oleh transaksi lain di tengah-tengah eksekusinya. Mengunci baris-baris yang sudah ada saja tidak cukup. Predicate Locking adalah solusinya.
Alih-alih mengunci baris data individual, mekanisme ini mengunci sebuah predikat (kondisi dalam klausa
WHERE). Misalnya, jika Transaksi 1 menjalankanSELECT * FROM instructor WHERE salary > 90000, sistem tidak hanya mengunci instruktur yang gajinya di atas 90rb saat ini, tetapi juga mengunci “kondisisalary > 90000” itu sendiri. Hal ini akan mencegah Transaksi 2 untuk menyisipkan instruktur baru dengan gaji 100rb hingga Transaksi 1 selesai.Implementasi Populer di Dunia Nyata
MySQL (InnoDB): Secara default menggunakan locking (khususnya protokol Two-Phase Locking) dan juga mengimplementasikan MVCC untuk level isolasi
REPEATABLE READ.PostgreSQL & Oracle: Keduanya adalah pengguna utama MVCC (dengan varian bernama Snapshot Isolation). Inilah sebabnya kedua basis data ini dikenal memiliki performa konkurensi yang sangat baik.
Two-Phase Locking (2PL)
Ini adalah protokol locking yang paling umum untuk menjamin conflict serializability. Aturannya sederhana: sebuah transaksi dibagi menjadi dua fase:
Growing Phase: Transaksi boleh meminta dan mendapatkan lock, tetapi tidak boleh melepas lock apa pun.
Shrinking Phase: Transaksi boleh melepas lock, tetapi setelah melepas satu lock, ia tidak boleh meminta lock baru lagi.
Protokol ini efektif, namun memiliki kelemahan: dapat menyebabkan deadlock (situasi di mana dua atau lebih transaksi saling menunggu untuk melepaskan lock).