Saya mencoba untuk mengumpulkan beberapa pengetahuan tentang database SQL dan saya punya beberapa pertanyaan tentang file log transaksi (LDF).
Pertama, ketika Anda membuat database, Anda harus menentukan Ukuran File Awal untuk database dan file log. Dari apa yang saya lihat, setelah file dibuat pada disk, mereka akan memiliki ukuran yang ditentukan terlepas dari apakah ada data aktual dalam database atau jika telah ada transaksi (log).
Pemahaman saya adalah bahwa membuat cadangan database:
- Memotong log transaksi, dan
- Kecilkan ukurannya
dari file LDF pada disk dengan "mengosongkan" log di dalamnya.
Sekarang sepertinya saya tidak memahami ini dengan benar karena file log tampaknya berukuran tetap. Pertanyaan saya yang sebenarnya seperti ini:
Apa yang sebenarnya dilakukan pemotongan log ke file log (LDF)? Proses ini seharusnya mencegah disk menjadi penuh.
Harap perbaiki saya jika saya tidak memahami beberapa konsep dengan benar.
Terima kasih!
sumber
Pencocokan dan Pencampuran
Mencadangkan log transaksi tidak sama dengan memotong file log transaksi, dan memotong file log transaksi tidak sama dengan menyusutkan file log transaksi. Oh ya, dan mencadangkan file log transaksi tidak harus memicu pemotongan. Tergantung pada beban saat ini, mesin database mungkin memutuskan untuk menetapkan pos pemeriksaan, tetapi menunggu sedikit dengan pemotongan.
Menjelaskan
File log transaksi adalah tempat mesin database menyimpan modifikasi yang dibuat untuk data dalam database, terlepas dari apakah database dalam model pemulihan SEDERHANA atau dalam model pemulihan LENGKAP. (Penting)
Sekarang file log transaksi database bukan hanya satu wadah penyimpanan kontinu, tetapi kumpulan File Log Virtual (VLF) yang dibuat dalam urutan berurutan di dalam file Transaction Log (TLog). Ukuran VLF bervariasi tergantung pada versi SQL Server yang saat ini Anda gunakan dan juga pada ukuran awal yang Anda pilih selama pembuatan file TLog dan juga ukuran yang Anda pilih (jika ada) untuk pengaturan pertumbuhan otomatis File TLog.
Referensi:
- Perubahan penting pada algoritma pembuatan VLF di SQL Server 2014 (SQLSkills.com)
- Nomor urut VLF awal dan ukuran file log default (SQLSkills.com)
- Di dalam Mesin Penyimpanan: Lebih lanjut tentang sifat melingkar dari log (SQLSkills. com)
... dan mungkin dalam urutan terbalik
Ketika data dimodifikasi dalam database, Mesin Database akan menulis perubahan ini ke dalam TLog dari database yang sesuai untuk menegakkan konsistensi transaksional. Ini juga dikenal sebagai ACID - Atomicity, Consistency, Isolasi, Durability . Transkripsi aktual dari perubahan ini disimpan dalam VLFs dari TLog (file). Ketika VLF penuh, transaksi terbaru akan disimpan dalam VLF berikutnya yang tersedia secara berurutan.
Pengecualian
Namun jika akhir file TLog tercapai, modifikasi akan disimpan dalam VLF pertama di awal file TLog. (dijelaskan dalam Inside the Storage Engine: Lebih lanjut tentang sifat melingkar dari log )
Ketika tidak ada VLF tersedia untuk menyimpan transaksi baru dan jika pengaturan pertumbuhan otomatis dikonfigurasi, Mesin Database akan menumbuhkan file TLog dengan jumlah yang ditentukan dan membuat VLF tambahan tergantung pada ukuran yang ditentukan dalam pengaturan pertumbuhan otomatis dan formula dijelaskan dalam perubahan penting pada algoritma penciptaan VLF di SQL Server 2014 . Transaksi selanjutnya dapat disimpan di VLF berikutnya di dalam file TLog.
Mencadangkan File TLog
Ketika Anda memicu cadangan file TLog semua yang Anda lakukan adalah memberitahu mesin database untuk
Sejauh ini tidak ada ruang yang telah dirilis di dalam file TLog untuk Mesin database untuk digunakan kembali ...
Pemotongan Otomatis File TLog
... tetapi jika Mesin Basis Data memiliki beberapa siklus untuk cadangan dan tidak berada di bawah tekanan yang sangat berat itu kadang-kadang akan melihat file TLog, perhatikan Pos Pemeriksaan dan lepaskan VLF untuk digunakan kembali. Ruang di dalam file TLog masih digunakan oleh VLF (ukuran yang sama, lokasi yang sama) tetapi mereka bebas untuk digunakan kembali.
Ini didokumentasikan dalam Pemotongan Log Transaksi :
Ada beberapa kasus ketika ini tidak terjadi:
Visualisasi pemotongan log
Pemotongan log dapat diamati ketika Anda meminta ukuran TLog menggunakan pernyataan SQL atau laporan Space Database di UI SSMS. Anda mungkin mengamati bahwa ruang yang digunakan di dalam file TLog mungkin hanya 1% dari ukuran file TLog yang tersedia.
Menyusut atau Tidak Menyusut
Rekomendasi umum adalah untuk tidak mengecilkan file TLog, karena itu tumbuh karena alasan tertentu dan mungkin akan tumbuh lagi ke ukuran dulu. Tapi itu cerita untuk posting lain. Ada beberapa alasan bagus, salah satunya adalah ketika Anda membuat kembali ukuran VLF di dalam file TLog Anda.
Menjawab pertanyaan Anda
Sebaris tepat di bawah asumsi dan pertanyaan Anda
Ini anggapan yang salah. Mencadangkan basis data Anda (LENGKAP, BERBEDA) tidak melakukan apa-apa dengan file TLog. Cadangan LENGKAP akan membuat keadaan konsisten dari basis data Anda bersama dengan transaksi yang dilakukan dari file TLog. Cadangan DIFF akan membuat status yang konsisten dari semua cadangan TLog sebelumnya sejak cadangan LENGKAP terakhir dari basis data Anda.
Namun, Cadangan TLOG akan membuat cadangan dari transaksi yang dilakukan dari file TLog, menetapkan pos pemeriksaan dan mungkin (saat tidak sedang dalam beban berat) melepaskan VLF untuk digunakan kembali.
Tidak, saat mempertimbangkan cadangan FULL dan DIFF. Tidak, ketika mempertimbangkan cadangan TLOG, tetapi akan membebaskan VLF di dalam file TLog, jika mesin database memiliki waktu luang.
Memotong log memungkinkan VLF digunakan kembali. Itu saja.
Proses ini dapat bermanfaat mencegah file TLog dari menumbuhkan pengaturan pertumbuhan otomatis JIKA telah ditetapkan.
Jika tidak ada pengaturan pertumbuhan otomatis yang telah ditetapkan , karena proses rekayasa persyaratan Anda menentukan bahwa file TLog akan memiliki ukuran tetap, maka kasus terburuk di sini adalah bahwa TLog terisi karena tidak ada cadangan TLog yang terjadi dan karenanya tidak ada VLF yang dibebaskan. TLog tidak dapat tumbuh dan VLF tidak dibebaskan untuk memungkinkan transaksi lebih lanjut ditulis ke file TLog (atau VLF secara internal).
sumber
Sementara Brent Ozar telah memberi Anda penjelasan tentang bagaimana file log transaksi terlihat seperti saya akan fokus pada pertanyaan-pertanyaan tertentu Anda
Cadangan penuh tidak melakukan apa pun pada log transaksi dalam model pemulihan apa pun. Dalam model pemulihan penuh ketika Anda mengambil cadangan log transaksi kemudian memotong log. Harap dicatat jika transaksi berjalan lama masih ada memegang VLF atau sesuai penjelasan Brent masih membutuhkan laci transaksi lain tidak dapat memanfaatkan kembali laci atau dalam istilah teknis tidak akan terpotong sehingga dapat digunakan kembali.
Itu juga tidak menyusutkan log transaksi. Untuk menyusutkan log, Anda harus menggunakan
dbcc shrinkfile
perintahItu membuat file log dapat digunakan kembali sehingga transaksi lain dapat menggunakannya atau sesuai analogi Brent, orang lain dapat menggunakan laci untuk menyimpan barang-barang di sana.
Setelah melalui jawaban saya sangat menyarankan Anda untuk membaca tentang log transaksi di SQLSKILLS.com
sumber