Back to IF3140 Sistem Basis Data
Fondasi Recovery: Klasifikasi Kegagalan & Struktur Penyimpanan
Questions/Cues
Apa tujuan utama Recovery System?
Apa saja 3 jenis kegagalan (failure)?
Apa perbedaan Transaction vs System vs Disk Failure?
Apa 3 level hirarki penyimpanan?
Apa itu Volatile vs Nonvolatile?
Apa itu Stable Storage?
Bagaimana cara mengaproksimasi Stable Storage?
Bagaimana alur akses data (Disk vs Buffer)?
Mengapa buffer jadi inti masalah recovery?
Reference Points
- Slides “12 - Recovery System - 1.pdf” (Slide 5-11)
Apa itu Recovery System?
Recovery System adalah sebuah mekanisme dalam DBMS (Database Management System) yang bertugas untuk memastikan database kembali ke state (kondisi) terakhir yang konsisten setelah terjadinya kegagalan.
Tujuan utamanya adalah untuk menjamin dua properti ACID:
Atomicity: Transaksi harus dieksekusi secara utuh (semua operasinya) atau tidak sama sekali. Jika transaksi gagal di tengah jalan, efeknya harus dibatalkan total (seperti tidak pernah terjadi).
Durability: Jika sebuah transaksi telah berhasil di-commit (diselesaikan), perubahannya harus bersifat permanen dan tidak boleh hilang, bahkan jika terjadi kegagalan sistem setelahnya.
Algoritma recovery memiliki dua bagian:
Tindakan selama operasi normal: Mencatat informasi yang cukup (misalnya dalam sebuah log) untuk memungkinkan pemulihan nanti.
Tindakan setelah kegagalan: Menggunakan informasi yang dicatat tadi untuk mengembalikan database ke state yang konsisten.
Tiga Jenis Klasifikasi Kegagalan
Kegagalan yang dapat terjadi pada sistem database dikategorikan menjadi tiga:
Transaction Failure (Kegagalan Transaksi)
- Transaksi gagal menyelesaikan eksekusinya.
- Logical Errors: Kesalahan internal dalam logika transaksi. Contoh: data yang dicari tidak ditemukan, pembagian dengan nol, input tidak valid.
- System Errors: Sistem database menghentikan transaksi secara eksternal. Contoh: sistem mendeteksi deadlock dan memilih satu transaksi untuk “dikorbankan” (di-abort).
System Crash (Kegagalan Sistem)
Perangkat keras (CPU, RAM) atau perangkat lunak (OS, bug di DBMS) mengalami kegagalan, menyebabkan sistem berhenti beroperasi.
Asumsi “Fail-Stop”: Kita mengasumsikan bahwa isi dari non-volatile storage (disk) aman dan tidak korup akibat crash ini.
Konsekuensi: Isi dari volatile storage (main memory/RAM) hilang seluruhnya.
Disk Failure (Kegagalan Disk)
Kerusakan pada media penyimpanan disk (misal: head crash, kerusakan permukaan).
Menyebabkan sebagian atau seluruh isi disk hilang atau korup.
Asumsi “Detectable”: Kita mengasumsikan kegagalan ini dapat dideteksi. Sistem modern menggunakan checksums untuk memverifikasi integritas data saat dibaca.
Hirarki Struktur Penyimpanan
Untuk memahami recovery, kita harus paham di mana data disimpan. Ada tiga level penyimpanan berdasarkan kecepatan dan ketahanannya:
Volatile Storage (Penyimpanan Volatil)
Data akan hilang jika terjadi kegagalan sistem (misal: listrik mati).
Sangat cepat (biasanya diakses dalam nanodetik).
Contoh: Main Memory (RAM), Cache CPU.
Nonvolatile Storage (Penyimpanan Non-Volatil)
Data akan bertahan (survive) meskipun terjadi kegagalan sistem.
Lebih lambat daripada volatile storage (diakses dalam milidetik atau mikrodetik).
Contoh: Hard Disk Drive (HDD), Solid-State Drive (SSD), Flash memory.
Penting: Meskipun datanya bertahan dari system crash, media ini sendiri bisa gagal (menjadi disk failure).
Stable Storage (Penyimpanan Stabil)
Ini adalah bentuk penyimpanan teoritis atau “mitos” yang diasumsikan tidak akan pernah gagal atau kehilangan data dalam kondisi apa pun.
Di dunia nyata, tidak ada penyimpanan yang 100% stabil.
Kita hanya bisa mengaproksimasi (mendekati) stable storage, biasanya dengan redundansi.
Aproksimasi Stable Storage
Karena stable storage ideal tidak ada, kita membuatnya dengan cara menyimpan beberapa salinan (copies) data di media nonvolatile yang terpisah secara fisik.
Implementasi: Menyimpan data yang sama di beberapa disk yang berbeda (bahkan bisa di lokasi geografis yang berbeda untuk disaster recovery).
Tantangan: Proses penulisan ke disk itu sendiri bisa gagal (berhasil, gagal sebagian, atau gagal total).
Prosedur Tulis yang Aman:
Tulis informasi ke blok fisik pertama.
Setelah dipastikan berhasil, tulis informasi yang sama ke blok fisik kedua.
Operasi penulisan (output) baru dianggap selesai (sukses) setelah penulisan kedua berhasil.
Recovery: Jika saat pengecekan ditemukan salah satu copy rusak (via checksum), data bisa dipulihkan dari copy yang masih bagus.
Alur Akses Data (Disk vs Buffer)
Ini adalah konsep kunci mengapa recovery sangat penting. Modifikasi data tidak langsung terjadi di disk.
Disk (Physical Blocks): Tempat data disimpan secara permanen (nonvolatile).
Memory (Buffer): Area di RAM (volatile) yang berfungsi sebagai “meja kerja” atau cache. Blok data dari disk disalin ke sini sebelum bisa dibaca atau dimodifikasi.
Working Area (Per Transaksi): Area kecil di RAM untuk menyimpan data yang sedang diolah oleh satu transaksi.
Alur Proses:
Transaksi ingin membaca data
X(Read(X)).Sistem mengecek apakah blok
Xada di Buffer (memory).Jika tidak ada, sistem melakukan
Input(X): Menyalin blokXdari Disk ke Buffer.Data
Xdisalin dari Buffer ke Working Area transaksi.Transaksi memodifikasi
Xdi Working Area-nya, lalu menuliskannya kembali keXdi Buffer (Write(X)).Masalah Inti Recovery:
Pada titik ini, data X yang baru sudah ada di Buffer (di RAM/volatile), tapi BELUM tentu ada di Disk (nonvolatile).
Jika terjadi System Crash sekarang, semua perubahan pada
Xyang ada di Buffer akan HILANG. Ini melanggar prinsip Durability.Di sisi lain, output (penulisan dari buffer ke disk) bisa terjadi kapan saja. Jika
Output(X)terjadi sebelum transaksi commit, dan transaksi itu kemudian gagal (abort), maka dataXyang “kotor” sudah terlanjur ada di disk. Ini melanggar prinsip Atomicity.
Sistem recovery database dirancang untuk menjamin Atomicity dan Durability dalam menghadapi berbagai jenis kegagalan (transaksi, sistem, atau disk). Fondasinya terletak pada pengelolaan hirarki penyimpanan—mulai dari volatile storage (RAM) yang cepat tapi rentan, nonvolatile storage (Disk) yang bertahan dari crash, hingga konsep ideal stable storage (yang diaproksimasi dengan redundansi). Masalah utama recovery muncul karena modifikasi data terjadi di buffer (volatile) dan mungkin belum ditulis ke disk (nonvolatile) saat kegagalan terjadi, sehingga memerlukan mekanisme untuk memulihkan data ke state yang konsisten.
Additional Information
Pendalaman Teknis: RAID sebagai Aproksimasi Stable Storage
Konsep “menyimpan beberapa salinan di disk terpisah” (slide 8) adalah implementasi praktis yang dikenal sebagai RAID (Redundant Array of Independent Disks).
RAID 1 (Mirroring): Ini adalah bentuk paling murni dari aproksimasi di slide. Setiap data yang ditulis ke Disk 1 akan disalin persis (di-mirror) ke Disk 2.
Kelebihan: Jika satu disk gagal total, data utuh ada di disk lainnya. Kecepatan baca bisa meningkat.
Kekurangan: Kapasitas penyimpanan terbuang 50% (misal: 2 buah disk 1TB hanya memberikan kapasitas 1TB).
RAID 5 (Parity): Menggunakan “parity” (data matematis yang bisa merekonstruksi data hilang) yang disebar ke semua disk. Ini lebih hemat kapasitas daripada RAID 1 dan bisa mentolerir kegagalan 1 disk.
RAID 6 (Double Parity): Mirip RAID 5 tapi dengan dua blok parity. Ini bisa mentolerir kegagalan 2 disk secara bersamaan, memberikan redundansi yang lebih tinggi lagi.
Dalam konteks database enterprise, penggunaan RAID (terutama RAID 1, 10, 5, atau 6) adalah standar untuk mengimplementasikan “nonvolatile storage” yang andal, yang merupakan langkah pertama menuju “stable storage”.
Pendalaman Teknis: Checksums dan Silent Data Corruption
Slide 5 menyebutkan bahwa Disk Failure diasumsikan “detectable”. Salah satu mekanisme deteksi terpenting adalah Checksum.
Bagaimana cara kerjanya?: Saat database menulis sebuah blok data (misal: 8KB) ke disk, ia juga menghitung sebuah “checksum” (seperti sidik jari digital, misal: menggunakan algoritma CRC32) dari data tersebut. Nilai checksum ini disimpan bersama data di disk.
Saat Membaca: Ketika blok data itu dibaca kembali, sistem akan:
Membaca blok data 8KB tersebut.
Menghitung ulang checksum dari data yang baru dibaca menggunakan algoritma yang sama.
Membandingkan checksum yang baru dihitung dengan checksum yang tersimpan di disk.
Deteksi Kegagalan: Jika kedua checksum berbeda, itu berarti data telah mengalami korupsi saat berada di disk (disebut silent data corruption). DBMS akan tahu bahwa blok ini rusak dan harus memulihkannya (misal: mengambil dari salinan RAID).
Sumber & Referensi Lanjutan:
Buku: Silberschatz, Korth, Sudarshan, “Database System Concepts”, 7th Ed, Chapter 19.1 - 19.3.
Artikel: “RAID Levels Explained” (banyak sumber online, misal: dari Wikipedia atau situs storage seperti SNIA).
Konsep: “Volatile vs. Non-Volatile Memory” dan “Persistent Memory (PMEM)” (sebagai teknologi baru yang menjembatani keduanya).