VLF NEDİR? ARTILARI EKSİLERİ NELERDİR? VLF’NİN ÇÖZÜM YOLU NEDİR?
Herkese merhaba arkadaşlar,
Bugün sizlere radarınızda olması gereken, bir performans sorunu olan VLF konusunu ele alacağım.
VLF, SQL Server tarafından dahili olarak yönetilen LDF içerisinde bulunan sanal log dosyalarıdır. Fiziksel log dosyaları (LDF dosyaları) veritabanı sistemi tarafından iç transaction yönetimi için birden fazla mantıksal dosyalara bölümlendirilir. Bir sistemde bu dosyaların sayısı artıkça özellikle sistemin yeniden açılma durumlarında o veritabanının toparlanma süresi (recovery time) uzadığı gibi LOG dosyasına ihtiyaç duyuldukça performans sorunu yaşanır. Bu tür çok log dosyalı veritabanlarında SQL Servisini restart ettiğimizde o veritabanı uzun süre “Restoring” modunda kalabiliyor. Bu veritabanının kendine gelme süresi bazen 1-2 saati bulabilir.
İdeal durumda VLF sayısının 50 veya altı olması beklenir. Bu rakamın üstündeki her dosya performansı olumsuz etkileyecektir. Mevcut veritabanında ne kadar VLF olduğunu anlamak için DBCC LOGINFO komutu kullanılır.
Çıktısı:
Bu sayıyı düşürmek için sık sık Transaction Log Backup alınabilir.
BACKUP LOG VeriTabaniAdi TO BackupDevice
Veya DBCC SHRINKFILE komutu aracılığıyla Transaction Log dosyası mümkün olduğunca sıkıştırılır. Transaction Log içerisinde ne kadar boş alan olduğunu DBCC SQLPERF(LOGSPACE) komutuyla öğrenebiliriz.
Çıktısı:
ARTILARI EKSİLERİ NELERDİR
- Default ayarlarla veritabanı oluşturuken veritabanının log dosyasının autogrowth’u ve initial size’ı uygun set edilmediyse virtual log file sayısı çok fazla olur ve performans sıkıntılarını da beraberinde getirir.
- Veritabanının recover olma süresini uzatır.
- Örneğin sunucu ya da SQL Server servis’i restart olursa veritabanı daha geç ayağa kalkar. Log Backup alma süresini uzatır. Hatta bazı durumlarda insert/update/delete sürelerini uzatır.
- VLF sayısının belli bir standardı yoktur. Genelde 1000’den fazla olursa problem çıkarma ihtimali artar. (Örneğin log dosyasının boyutu 1 TB olan bir veritabanında vlf sayısı 800 iken, log dosyasının boyutu 10 gb olan bir veritabanındaki vlf sayısı 3000 ise burda bir problem var demektir.)
- Amaç, transaction log dosyasındaki az sayıdaki VLF(virtual log files) korumaktır çünkü SQL Server daha az sayıda dosyayı daha kolay işler.
- Otomatik büyüme ayarları düzgün yönetilmezse, bir SQL Server veritabanı otomatik olarak büyümeye zorlanabilir ve bu da ciddi performans sorunlarına neden olabilir.
- Çok sayıda günlük dosyasına sahip olmak, yedekleme performansını, geri yüklemeyi ve veritabanı başlatma işlemlerini etkileyebilir.
VLF’NİN ÇÖZÜM YOLU NEDİR?
Bu durum, transaction log dosyasını küçülterek düzeltebilir ve uygun bir başlangıç boyutu ve büyük otomatik büyüme miktarıyla, yoğun olmayan zamanda ve ağır bir işlemin çalışmadığından emin olduktan sonra aşağıdaki adımları izleyerek yeniden büyütebilirsiniz:
- Bellekteki tüm sayfaları veritabanı dosyalarına yazmak için manuel bir CHECKPOINT gerçekleştirin.
- Veritabanı günlük dosyasını mümkün olan en küçük boyuta küçültün(Shrink işlemi)
- Transaction log yedeklemesi yapın.
Umarım faydalı olmuştur. Bir sonraki makalede görüşmek üzere ❀
Referanslar
https://www.mssqltips.com/sqlservertutorial/3309/what-is-a-virtual-log-file-vlf/