Vlf(Virtual Log File) count nedir
SQL Serverdaki ldf uzantılı Transaction Log dosyası bir ya da birden fazla virtual log file dan oluşur. Adından anlaşılacağı gibi bu dosya fiziksel bir dosya değil sanal bir dosyadı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.
Örneğin Inital size’ı 5 mb ve auto growth’u da %10 olarak set edili bir log dosyasına sahip veritabanımız olsun. Log dosyasının boyutu zamanla büyüdüğünde performans sıkıntısı başlayacaktır. DBCC LOGINFO() komutunu kullanarak veritabanınız için vlf count’u bulabilirsiniz.
DBCC LOGINFO komutunu çalıştırdığınızda toplam kaç kayıt gelirse,script’i çalıştırdığınız veritabanının o kadar vlf sayısı vardır. Aşağıdaki ekran görüntüsünde göründüğü gibi benim Test veritabanımdaki vlf count 4’tür.
Genel olarak instance üzerinde hangi veritabanlarında bu sıkıntı var kontrol etmek için Kevin Riley’in script’ini aşağıdaki linkte bulabilirsiniz. Linkte indirdiğiniz script SQL Server 2014 te çalışmıyor. Makalenin hemen alt tarafındaki sql’i kopyalayıp çalıştırmanız gerekiyor.
https://gallery.technet.microsoft.com/scriptcenter/SQL-Script-to-list-VLF-e6315249
Eğer Log dosyanız bu şekilde büyüdüyse çözüm olarak log backup’ı aldıktan sonra log dosyasını shrink edip makul bir Initial Size verip(Örnepin 1024 mb) auto growth’unu da 512 mb gibi bir rakam set edebilirsiniz.
Log dosyasını shrink etmek için “SQL Server Log Dosyasını Shrink Etmek” isimli makalemi okuyabilirsiniz.
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.