Log file dan checkpointing pada database
Apa itu Transaction log?
Transaction log adalah file bagian integral dari setiap database SQL Server. Ini berisi log record yang dihasilkan selama proses logging di database SQL Server. Transaction log adalah komponen paling penting dari database SQL Server dalam hal ke pemulihan database – namun, Transaction log harus tidak rusak. Setelah setiap modifikasi database – terjadinya transaksi, log record ditulis ke Transaction log. Semua perubahan ditulis berurutan.
Apa yang dimaksud dengan SQL Server transaction log store?
Transaction log menyimpan setiap transaksi yang dilakukan ke database SQL Server, kecuali beberapa yang tercatat minimal seperti BULK IMPORT atau SELECT INTO. Secara internal itu dibagi menjadi bagian-bagian yang lebih kecil yang disebut Virtual Log Files (VLFs). Ketika satu VLF menjadi log penuh terus menulis ke yang berikutnya tersedia di log transaksi. File log transaksi dapat direpresentasikan sebagai file bundar. Ketika logging mencapai akhir file itu mulai lagi dari awal, tetapi hanya jika semua persyaratan telah dipenuhi dan bagian tidak aktif telah terpotong. Proses pemotongan diperlukan untuk menandai semua bagian yang tidak aktif sehingga dapat digunakan kembali dan ditimpa
log record tidak lagi diperlukan dalam Trancation log jika semua hal berikut ini benar:
- Transaksi yang menjadi komitmennya
- Halaman database yang diubah semuanya telah ditulis ke disk oleh Checkpoint
- log record tidak diperlukan untuk cadangan (full, diferential, atau log)
- log record tidak diperlukan untuk fitur apa pun yang membaca log (seperti mirroring atau replikasi database)
Logical log adalah bagian aktif dari Transaction log. Log Sequence Number (LSN) mengidentifikasi setiap transaksi dalam Transaction log. MinLSN adalah titik awal dari transaksi aktif tertua dalam online Transaction log.
Bisakah database SQL Server berfungsi tanpa Transaction log?
Tidak, itu tidak mungkin karena desain SQL Server dan ACID compliance. ACID singkatan dari atomicity, consistency, isolation, dan durability. Semua transaksi harus memenuhi karakteristik ini:
- Atomic Transaksi harus bersifat selesai atau tidak dimulai.
- Suatu transaksi menegakkan konsistensi dalam status sistem dengan memastikan bahwa pada akhir transaksi apa pun sistem dalam keadaan valid
- Ketika suatu transaksi berjalan secara isolation,harus tampak sebagai satu-satunya tindakan yang dilakukan sistem pada satu waktu
- Suatu transaksi tahan lama artinya setelah berhasil diselesaikan, semua perubahan yang dilakukan pada sistem bersifat permanen.
Apa itu Checkpoint?
Checkpoint
- Checkpoint adalah jenis mekanisme di mana semua log sebelumnya dihapus dari sistem dan disimpan secara permanen di disk penyimpanan.
- Checkpoint seperti bookmark. Ketika eksekusi transaksi, Checkpoint seperti itu ditandai, dan transaksi dieksekusi kemudian menggunakan langkah-langkah transaksi, file-file log akan dibuat.
- Ketika mencapai Checkpoint, maka transaksi akan diperbarui ke dalam database, dan sampai saat itu, seluruh file log akan dihapus dari file tersebut. Kemudian file log diperbarui dengan langkah transaksi baru hingga Checkpoint berikutnya dan seterusnya.
- Checkpoint digunakan untuk menyatakan titik sebelum DBMS dalam keadaan konsisten, dan semua transaksi dilakukan.
Penggunaan Checkpoint
Ketika sistem crash, pengguna harus memeriksa log. Pada prinsipnya, itu perlu mencari seluruh log untuk menentukan informasi ini. Ada dua kesulitan utama dalam pendekatan ini:
- Proses pencarian memakan waktu.
- Sebagian besar transaksi yang, menurut algoritma kami, perlu diulang sudah menulis pembaruan mereka ke dalam basis data. Meskipun mengulanginya tidak akan membahayakan, itu akan menyebabkan pemulihan lebih lama.
Undo and Redo Operations
Karena semua modifikasi database harus didahului dengan pembuatan log record, sistem telah menyediakan nilai lama sebelum modifikasi item data dan nilai baru yang ditulis untuk item data. Ini memungkinkan sistem untuk melakukan operasi redo dan undo yang sesuai:
- Undo: menggunakan log record mengatur item data yang ditentukan dalam log record ke nilai lama.
- redo: menggunakan log record mengatur item data yang ditentukan dalam log record ke nilai baru.
Jenis-jenis Checkpoint
Checkpoint Otomatis
Sebuah Checkpoint otomatis adalah tipe paling umum yang dipicu oleh proses background process. Option Konfigurasi Server “Interval Recovery” digunakan oleh SQL Server Database Engine untuk menentukan seberapa sering pos-pos pemeriksaan otomatis dikeluarkan pada database yang diberikan. Anda dapat mengubahnya menggunakan prosedur sp_configure. Misalnya, jalankan perintah berikut untuk mengatur interval pemulihan ke 15 detik:
EXEC [sp_configure] ‘recovery interval’, 15
GO
RECONFIGURE
GO
Indirect Checkpoint
Jenis Checkpoint yang diperkenalkan dalam SQL Server 2012 adalah Indirect Checkpoint. Checkpoint ini juga berjalan di background, tetapi memenuhi waktu pemulihan target yang ditentukan pengguna untuk database yang diberikan. Secara default TARGET_RECOVERY_TIME adalah 0, artinya database akan menggunakan pos pemeriksaan otomatis. Jika TARGET_RECOVERY_TIME diatur ke> 0, itu akan menimpa Interval Pemulihan yang ditentukan untuk server dan menghindari Checkpoint otomatis untuk database itu.
Gunakan perintah berikut untuk mengatur waktu pemulihan target untuk database:
ALTER DATABASE database_name SET TARGET_RECOVERY_TIME = target_recovery_time { SECONDS | MINUTES}
Manual Checkpoint
Checkpoint manual berjalan seperti perintah Transact-SQL lainnya. Ini berjalan sampai selesai secara default. Jenis pos pemeriksaan ini hanya muncul di database saat ini. Dimungkinkan juga untuk mengatur kerangka waktu di mana Anda ingin Checkpoint Anda selesai. Gunakan perintah berikut untuk mengeluarkan pos pemeriksaan manual:
CHECKPOINT [ checkpoint_duration (in seconds) ]
Internal Checkpoint
Tipe keempat adalah Checkpoint internal yang tidak dapat dikontrol oleh pengguna. Itu mulai mengikuti transaksi spesifik, seperti:
- Beberapa file database telah dimodifikasi (dihapus atau ditambahkan oleh perintah T-SQL ALTER DATABASE)
- Pencadangan database sedang berlangsung
- Database snapshot sedang dibuat
- Operasi shutdown terjadi pada semua database kecuali ketika shutdown tidak bersih (dengan NOWAIT)
- Model pemulihan telah diubah dari full atau Bulk-Logged to Simple
- Log basis data 70% penuh (hanya berlaku untuk Simple recovery model)
- Operasi yang dicatat secara minimum dijalankan (hanya berlaku untuk Bulk-Logged recovery model)
Mapping of checkpoints