Sepetiniz

Log Dosyası Bilgilerine Ulaşın(sys.dm_db_log_stats)

SQL Server’da Log dosyası hem mimariyi anlamak hem de performans açısından en önemli parçalardan biridir.  Log dosyası ile ilgili “SQL Server Transaction Log Nedir” isimli makaleyi okumanızı tavsiye ederim.

 

SQL Server 2017 ile beraber log dosyasını sorgulayacağımız bir dmv hayatımıza girdi. Bu dmw ile yapabildiğimiz şeyleri başka şekillerde de yapabiliyorduk ama bence yineden daha kısa olması açısından gerekliydi.

 

Bu dmw’yi kullanarak veritabanlarından vlf sayısı fazla olanları yada log backup alınmayanları kolay bir şekilde bulabiliyoruz.

 

Vlf ile ilgili “Vlf(Virtual Log File) count nedir” isimli makaleyi okumanızı tavsiye ederim.

 

Aşağıda veritabanlarındaki vlf sayısı 100’ün üstünde olan veritabanlarının vlf sayılarını gösteren sorguyu bulabilirsiniz.

SELECT name AS 'Veritabanı İsmi', total_vlf_count AS 'VLF Sayısı'
FROM sys.databases AS db
CROSS APPLY sys.dm_db_log_stats(db.database_id)
WHERE total_vlf_count  > 100;

 

Aşağıda veritabanlarının son backup alma zamanını gösteren sorguyu bulabilirsiniz.

SELECT name AS 'Veritabanı İsmi', log_backup_time AS 'Son Backup Alma Zamanı'
FROM sys.databases AS db
CROSS APPLY sys.dm_db_log_stats(db.database_id);

 

Veritabanına İkinci Log Dosyası Eklemek

Genellikle veritabanında bulunan ldf uzantılı log dosyamızın olduğu diskte yer kalmadığı zaman yaptığımız bir işlemdir. Başka bir disk üzerinde ikinci bir log file’ı oluşturarak veritabanının log işlemlerinin buradan devam etmesini sağlarız.

 

SQL Server Transaction Log Nedir” isimli makalemde log dosyası ile ilgili detaylı bilgi bulabilirsiniz.

 

Konunun daha net anlaşılabilmesi için SQL Server’ın log dosya ya da dosyalarına hangi mantıkta yazdığından bahsedeyim.

 

Öncelikle ilk log dosyasının auto growth’u açık mı, açıksa log dosyasının olduğu diskte yeterli alan var mı ya da log dosyası maksimum büyüklüğüne ulaşmış mı(bir log dosyasının boyutu maksimum 2 TB olabilir) bunları kontrol eder. Eğer ilk log dosyasına yazabiliyorsa her zaman ilk log dosyasına yazar. İlk log dosyasına yazma ihtimali yoksa diğer log dosyasına yazma işlemi yapar.

 

Yani bir veritabanında 5 tane log dosyası oluşturduğunuzda 5 farklı diske aynı anda log yazma işlemi gerçekleşmez. Dolayısıyla data file sayısını arttırdığımızda elde ettiğimiz performansı log dosya sayısını arttırarak elde edemeyiz.

 

Birden fazla log dosyası varsa veritabanının o anda kullanmasını istediğiniz log dosyasının auto growth’unu açık hale getirip diğer log dosyalarının auto growth’unu kapalı hale getirebilirsiniz. Aynı işlemi data file’lar içinde gerçekleştirebilirsiniz. “Disklerde Yer Kalmadığı Zaman Veritabanını Başka Bir Diskten Büyütmek” isimli makalemde gerekli ayrıntıları bulabilirsiniz.

 

Gelelim veritabanına ikinci bir log dosyası oluşturma işlemine:

 

Veritabanı üzerinde sağ tıklayarak aşağıdaki gibi properties diyoruz.

 

 

Daha sonra Files sekmesine gelerek karşımıza çıkan ekranda sağ alt köşeden Add diyoruz.

 

Aşağıdaki ekranda görüldüğü gibi Logical Name kısmından yeni oluşturacağımız log dosyasına bir isim veriyoruz. Ben TestYeniLog ismini verdim.

 

File Type kısmından bu yeni ekleyeceğimiz dosyanın Log dosyasını olacağını belirtmek için LOG seçeneğini seçiyoruz. Log seçeneğini seçtiğimiz anda Filegroup Not Applicable olarak değişiyor. Çünkü Log dosyasınının file group’u olmaz.

 

Oluşturacağımız dosya için başlangıç boyutu belirlemek için Initial Size kısmına istediğimiz değeri yazıyoruz.

 

Autogrowth/Maxsize kısmından ise dosyanın büyümesi gerektiğinde ne kadar büyüyeceğini belirliyoruz. İlerde performans problemi yaşamamanız için autogrowth’u belirlerken çok dikkatli olmalısınız. “Vlf(Virtual Log File) count nedir” isimli makalemde bu konunun detaylarına değindim.

 

 

 

Bütün işlemlerimiz bittikten sonra ok diyoruz. Eğer veritabanının ilk log dosyasını değilde sadece ikinci log dosyasını kullanmasını istiyorsak, ilk log dosyası olan Test_log isimli dosyada Autogrowth/Maxsize ‘ın hemen yanındaki … ‘ya tıklayarak aşağıdaki gibi  Enable Autogrowth’daki tik’i kaldırarak ilk log dosyasının autogrowth(otomatik büyüme)’unu kapatabiliriz.