Back to IF3140 Sistem Basis Data
Algoritma Log-Based Recovery & Optimasi Buffering
Questions/Cues
Apa itu Transaction Rollback (saat normal)?
Apa itu Compensation Log Record (CLR)?
Apa 2 fase algoritma recovery dari failure?
Bagaimana cara kerja Redo Phase?
Apa itu
undo-list?Bagaimana cara kerja Undo Phase?
Apa itu Log Record Buffering?
Apa itu Log Force?
Apa aturan Write-Ahead Logging (WAL)?
Apa itu Database Buffering?
Apa kebijakan
stealvsno-force?Apa itu
latch?Reference Points
Slides “12 - Recovery System - 1.pdf” (Slide 22-27)
Slides “12 - Recovery System - 2.pdf” (Slide 28-31)
Algoritma Recovery (Detail)
Algoritma recovery dasar (seperti yang digunakan di ARIES) terdiri dari 3 fase, namun slide ini menyederhanakannya menjadi 2 fase utama setelah crash: Redo Phase dan Undo Phase. Algoritma ini juga bergantung pada prosedur
rollbackstandar.Transaction Rollback (Saat Operasi Normal):
Ini adalah proses abort yang diminta oleh transaksi itu sendiri (bukan karena crash).
Memindai log secara mundur dari akhir.
Untuk setiap log record
<Ti, X, V1, V2>milik transaksiTi:
Menulis nilai lama (
V1) kembali ke item dataX.Menulis Compensation Log Record (CLR), misal
<Ti, X, V1>, ke log. (CLR tidak akan di-undo).Setelah menemukan
<Ti start>, tulis<Ti abort>ke log.Recovery from Failure: Dua Fase
Setelah system crash, sistem melakukan recovery saat restart.
1. Redo Phase (Fase Mengulangi)
Tujuan: Mengembalikan state database ke kondisi tepat seperti saat crash (termasuk data “kotor” dari transaksi yang belum commit) dan mengidentifikasi transaksi mana yang gagal.
Proses:
Cari record
<checkpoint L>terakhir. Inisialisasiundo-listdengan daftarLdari checkpoint.Pindai log secara MAJU (dari checkpoint ke akhir).
Jika menemukan record
<Ti, X, V1, V2>, selalu lakukanREDO: tulis nilai baru (V2) ke data itemX.Jika menemukan
<Ti start>, tambahkanTikeundo-list.Jika menemukan
<Ti commit>atau<Ti abort>, hapusTidariundo-list.Hasil: Database di disk kini konsisten dengan state di log.
undo-listberisi semua transaksi yang dimulai tapi tidak pernah commit/abort.2. Undo Phase (Fase Membatalkan)
Tujuan: Membersihkan data “kotor” yang ditulis oleh transaksi di
undo-list.Proses:
Pindai log secara MUNDUR (dari akhir ke awal).
Cek setiap log record. Jika record itu milik transaksi
Tiyang ada diundo-list:
- Lakukan
UNDO(tulis nilai lamaV1) dan tulis CLR ke log (seperti rollback normal).Jika menemukan
<Ti start>untuk transaksiTiyang ada diundo-list:
Tulis
<Ti abort>ke log.Hapus
Tidariundo-list.Berhenti ketika
undo-listkosong.Optimasi: Log Record Buffering
Menulis log ke stable storage (disk) adalah operasi yang lambat. Untuk efisiensi, log record ditampung dulu di buffer (memory/volatile).
Output: Buffer log ditulis ke disk saat buffer penuh, atau saat terjadi Log Force.
Log Force: Operasi yang memaksa buffer log untuk segera ditulis ke stable storage. Ini wajib dilakukan saat transaksi
commituntuk menjamin Durability (karena transaksi baru dianggap commit saat record<Ti commit>-nya ada di stable storage).Aturan Kunci: Write-Ahead Logging (WAL)
Ini adalah aturan paling fundamental dalam recovery:
Informasi
UNDO(yaitu log record<Ti, X, V1, V2>) harus ditulis ke stable storage SEBELUM blok dataXyang dimodifikasi olehTi(di buffer) diizinkan untuk ditulis ke disk.Alasan: Jika sistem mengizinkan data
Xyang baru (kotor) ditulis ke disk, lalu crash sebelum log-nya ditulis, sistem tidak akan punya informasi (nilaiV1) untuk melakukanUNDO. Aturan WAL memastikan sistem selalu bisa membatalkan perubahan jika diperlukan.Optimasi: Database Buffering
Sama seperti log, blok data juga ditampung di buffer (memory). Ini melahirkan dua kebijakan:
stealPolicy: Blok data di buffer yang diubah oleh transaksi uncommitted (belum commit) diizinkan (“dicuri” /steal) untuk ditulis ke disk.
- Implikasi: Membutuhkan UNDO (karena data kotor ada di disk).
no-forcePolicy: Blok data tidak wajib “dipaksa” (force) ditulis ke disk saat transaksi commit.
Implikasi: Membutuhkan REDO (karena saat commit, datanya mungkin masih di buffer dan bisa hilang jika crash).
Algoritma recovery yang kita bahas (slide 23-26) adalah untuk kebijakan
steal/no-force, yang paling fleksibel dan umum digunakan.Latching: Saat blok data di buffer akan ditulis ke disk, blok itu harus di-
latch.Latchadalah mekanisme proteksi internal (bukan lock transaksi) yang sangat singkat, memastikan tidak ada update lain yang terjadi pada blok itu selama proses I/O penulisan ke disk.
Algoritma recovery modern (berbasis
steal/no-force) bekerja dalam dua fase: Redo Phase (memindai log maju untuk mengulang semua perubahan dan membangunundo-list) dan Undo Phase (memindai log mundur untuk membatalkan transaksi diundo-listmenggunakan Compensation Log Records/CLR). Agar ini aman, sistem wajib mengikuti aturan Write-Ahead Logging (WAL), yaitu log (info undo) harus ada di stable storage sebelum data yang diubahnya boleh ditulis ke disk.
Additional Information
Pendalaman Teknis: Latch vs. Lock
Sangat penting untuk membedakan antara
latchdanlock.
Lock (Kunci Transaksi):
Tujuan: Menjamin isolasi antar transaksi (logika database).
Durasi: Dipegang selama transaksi berlangsung (bisa lama, dalam milidetik atau bahkan detik).
Mekanisme: Dikelola oleh Transaction Manager. Jika terjadi deadlock, satu transaksi akan di-abort.
Latch (Kait Internal):
Tujuan: Menjamin konsistensi struktur data internal di memory (fisik).
Durasi: Dipegang dalam durasi yang sangat singkat (nanodetik atau mikrodetik), hanya selama operasi fisik (misal: mengakses 1 blok buffer).
Mekanisme: Dikelola oleh Buffer Manager. Deadlock tidak diizinkan terjadi (biasanya dihindari dengan ordering atau retry).
Contoh di slide 31 (mengambil exclusive latch saat output block) adalah contoh sempurna penggunaan
latchuntuk proteksi fisik.Pendalaman Teknis: ARIES
Algoritma yang dideskripsikan di slide ini adalah versi sederhana dari algoritma ARIES (Algorithm for Recovery and Isolation Exploiting Semantics), yang merupakan standar industri. ARIES menggunakan:
WAL: Seperti yang dijelaskan.
steal/no-force: Kebijakan buffer yang fleksibel.Repeating History during Redo: Fase Redo di ARIES mengulang semua aksi, bahkan aksi yang di-undo, untuk mengembalikan state tepat seperti saat crash.
Logging Undo Actions (CLRs): Seperti yang dijelaskan, agar proses undo bisa di-restart jika crash terjadi di tengah undo.
Sumber & Referensi Lanjutan:
Buku: Silberschatz, Korth, Sudarshan, “Database System Concepts”, 7th Ed, Chapter 19.6 - 19.7.
Paper: “ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging” (C. Mohan, et al.) - Paper fundamental di bidang ini.