Seberapa pentingkah log transaksi VLF untuk kinerja?

12

Seberapa pentingkah VLF ketika mempertimbangkan kinerja database? Apa yang akan menggambarkan situasi optimal untuk VLF?

the_good_pony
sumber
Untuk bacaan lebih lanjut, lihat pertanyaan saya di dba.stackexchange.com/questions/25408/…
Max Vernon
Keren - Saya bisa melihat ini membantu untuk melaporkan kinerja
the_good_pony
1
@ DBAWaffle Rujuk ke: Eksperimen dengan SQL Server VLFs, Bagian 1 dari Glenn Berry -> sqlskills.com/blogs/glenn/…
Kin Shah

Jawaban:

17

Apa itu file log virtual?

SQL Server membagi file log transaksi untuk setiap database menjadi potongan yang lebih kecil, yang disebut 'file log virtual' (atau singkatnya VLF). Fungsi utama mereka adalah sebagai penanda pemotongan pada cadangan log, yaitu SQL Server hanya akan menghapus (dan menandai tersedia untuk digunakan kembali) VLF yang benar-benar kosong. MSDN memiliki bagian tentang Log Transaksi - Arsitektur Fisik .

Apa yang menentukan jumlah VLF?

Setiap kali file log tumbuh (baik melalui autogrowth atau pertumbuhan manual), bagian baru dari file log dibagi menjadi sejumlah VLF, murni berdasarkan pada ukuran bagian baru (log transaksi yang ada dibiarkan sendiri). Jadi, pengaturan autogrowth kecil (yaitu autogrowth 10% yang merupakan default) akan menyebabkan sejumlah besar VLF dibuat.

Apa implikasi dari sejumlah besar VLF?

Masalah utama sejumlah besar penyebab VLF adalah:

  • Pemulihan lambat (pemulihan adalah fase selama pemulihan basis data di mana transaksi yang selesai ditulis ke halaman data dan transaksi yang tidak lengkap dibatalkan).
  • Kinerja pembaca log lambat dalam pengaturan mirroring basis data.
  • Kinerja lambat selama pembuatan snapshot basis data (perhatikan bahwa ini juga mencakup fungsi tertentu DBCCkarena mereka menggunakan snapshot basis data di latar belakang untuk memfasilitasi pemeriksaan konsistensi tanpa memblokir).

Bagaimana saya bisa mengetahui berapa banyak VLF yang dimiliki database saya?

DBCC LOGINFOakan mengembalikan 1 baris untuk setiap VLF dalam log transaksi basis data Anda. Pertanyaan ini memiliki beberapa skrip yang berguna untuk menerapkannya di semua database di server.

Berapa VLF terlalu banyak?

Itu panggilan penilaian yang harus Anda buat sendiri. Aturan pribadi saya adalah bahwa di bawah 50 tidak layak untuk dipermainkan, dan lebih dari 100 (atau lebih) dan saya memperbaiki pengaturan autogrowth dan membuat catatan mental untuk (di jendela pemeliharaan berikutnya) menyusut dan menumbuhkan kembali log (seperti di bawah) .

Tolong! Saya memiliki sebelas miliar VLF dan pemulihan basis data saya berlangsung sepanjang hari!

Garis pendek (dari blog Kimberly Tripp ):

  • Pastikan Anda satu-satunya koneksi yang aktif dalam database (jadi, lakukan ini selama jendela pemeliharaan)
  • Cadangkan log transaksi ke disk (menggunakan BACKUP LOG)
  • Jalankan DBCC SHRINKFILEdengan TRUNCATEONLYmengecilkan file log ke ukuran sekecil mungkin.
  • Jalankan ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsizeuntuk mengubah ukuran log transaksi Anda kembali dalam satu langkah **.

** Catatan - jika Anda memiliki file log yang sangat besar (puluhan GB atau lebih), Anda mungkin ingin mengubah ukuran dalam beberapa langkah untuk mendapatkan jumlah VLF yang sesuai dengan ukuran yang sesuai untuk menghindari pencadangan log yang terlalu tebal. Karena VLF adalah unit pemotongan, mereka juga menentukan ukuran cadangan log, sebagaimana dirinci dalam blog Kim .

Simon Righarts
sumber
Terima kasih, apakah Anda berpikir bahwa banyak VLF akan lebih jelas menghambat kinerja dalam lingkungan OLTP yang tinggi di mana data sedang diubah secara teratur, sejumlah besar komitmen untuk dilalui?
the_good_pony
Sejumlah besar VLF hanya benar-benar terkenal dalam situasi yang saya uraikan di atas (pemulihan, foto, mirroring). Mereka mungkin menghambat kinerja sedikit di lingkungan OLTP, tetapi hanya sedikit saja.
Simon Righarts
1
Bagi saya, Pemulihan 20+ jam adalah hal yang meyakinkan saya akan pentingnya mempertahankan jumlah VLF yang rendah (sub 1.000).
Max Vernon
@SimonRigharts Saya ingin tahu. Apakah sejumlah besar VLF berdampak pada kinerja transaksi biasa? Atau apakah itu hanya memengaruhi cadangan dan pemulihan?
Chris Aldrich
@ChrisAldrich Mungkin ada beberapa tingkat overhead yang kecil pada transaksi jika rentangnya mencakup batas VLF (tetapi jika saya belum pernah mendengarnya), tetapi sebagaimana dirinci dalam pertanyaan, satu-satunya saat Anda benar-benar akan melihat dampak dari sejumlah besar VLFs selama pemulihan, mirroring atau snapshot.
Simon Righarts