log_reuse_wait_desc Nedir ve Ne Anlatır?
Direnc Onen
sys.databases sistem tablosundaki log_reuse_wait_desc sütunu, bir veritabanının transaction log dosyasındaki boş alanın neden yeniden kullanılamadığını gösterir.
Eğer transaction log dosyanız sürekli büyüyorsa veya temizlenmiyorsa, bu sütun nedenini anlamak için en önemli kaynaktır.
0
NOTHING
Şu anda yeniden kullanılabilir sanal log dosyaları (VLF) bulunmaktadır.
1
CHECKPOINT
Son log küçültme işleminden bu yana bir checkpoint gerçekleşmedi.
2
LOG_BACKUP
Transaction log'un küçültülmesi için bir log yedeği alınması gerekmektedir.
3
ACTIVE_BACKUP_OR_RESTORE
Bir veri yedekleme veya geri yükleme işlemi devam ediyor.
4
ACTIVE_TRANSACTION
Devam eden bir işlem var ve log küçültme engelleniyor.
5
DATABASE_MIRRORING
Veritabanı mirroring işlemi duraklatıldı veya geride kaldı.
6
REPLICATION
Transaction replication nedeniyle log küçültülemiyor.
7
DATABASE_SNAPSHOT_CREATION
Bir veritabanı anlık görüntüsü (snapshot) oluşturuluyor.
8
LOG_SCAN
Log tarama işlemi devam ediyor.
9
AVAILABILITY_REPLICA
Always On Availability Group replikası log kayıtlarını uyguluyor.
10-12
(Kullanımda değil)
İç kullanım için ayrılmıştır.
13
OLDEST_PAGE
Dolaylı checkpoint nedeniyle en eski sayfa log küçültmeyi geciktiriyor.
14
OTHER_TRANSIENT
Bu değer şu an kullanılmamaktadır.
16
XTP_CHECKPOINT
Memory-Optimized Tables için bir checkpoint işlemi gereklidir.
log_reuse_wait_desc
Değerini Nasıl Görebilirim?
log_reuse_wait_desc
Değerini Nasıl Görebilirim?Aşağıdaki sorgu ile log_reuse_wait_desc
değerini kontrol edebilirsin:
log_reuse_wait_desc
Sorununu Çözmek İçin Ne Yapılmalı?
log_reuse_wait_desc
Sorununu Çözmek İçin Ne Yapılmalı?LOG_BACKUP → Log yedeği al (FULL Recovery kullanıyorsan)
ACTIVE_TRANSACTION → Uzun süren işlemi bul ve gerekirse sonlandır
CHECKPOINT → Manuel Checkpoint çalıştır
LOG Dosyasını Temizle (Shrink)
AlwaysOn ve Mirroring Durumunda, Senkronizasyonu Kontrol Et
log_reuse_wait_desc: OLDEST_PAGE
Ne Anlama Geliyor?
log_reuse_wait_desc: OLDEST_PAGE
Ne Anlama Geliyor?Eğer log_reuse_wait_desc
değeri OLDEST_PAGE
ise, bu şu anlama gelir:
Lazy Writer işlemi, en eski dirty page
'leri diske yazmadığı için transaction log temizlenemiyor.
Kirli Sayfa (Dirty Page
) Nedir? SQL Server'da, veri sayfaları bellekte değiştirildiğinde ancak henüz diske yazılmadığında "kirli sayfa" olarak adlandırılır.
Bu durum TEMPDB hariç tüm veritabanlarında görülebilir ve genellikle disk I/O darboğazları veya bellek yetersizliği nedeniyle oluşur.
OLDEST_PAGE
Sebepleri
OLDEST_PAGE
SebepleriDisk I/O Yavaşlığı:
SQL Server, değişen verileri diske yazarken gecikme yaşıyor olabilir.
Disk darboğazlarını ve I/O gecikmelerini kontrol etmelisin.
Bellek Yetersizliği:
Bellek (RAM) yeterli değilse, SQL Server değişiklikleri diske yazmada gecikme yaşayabilir.
Sorgu belleği tüketimini ve Page Life Expectancy (PLE) değerini kontrol etmelisin.
Checkpoint Çalıştırılmıyor:
Checkpoint işlemi gecikmiş olabilir, bu yüzden log dosyası eski
dirty page
’leri temizleyemiyor.Checkpoint manuel olarak tetiklenebilir.
Lazy Writer Gecikmesi:
Lazy Writer işlemi normalden daha yavaş çalışıyor olabilir.
Lazy Writer çalışma hızını kontrol etmek gerekebilir.
Çözüm Önerileri
Aşağıdaki adımlarla OLDEST_PAGE
sorununu çözebilirsin:
Checkpoint Çalıştır
İlk olarak, manuel CHECKPOINT işlemi yaparak değişiklikleri diske yazmayı zorla:
Birkaç saniye bekledikten sonra tekrar log_reuse_wait_desc
değerini kontrol et:
Eğer OLDEST_PAGE
hala devam ediyorsa, bir sonraki adımlara geçelim.
Disk I/O Performansını Kontrol Et
SQL Server’ın disk işlemlerinde bir darboğaz olup olmadığını görmek için şu sorguyu çalıştır:
Eğer io_stall_ms
değerleri çok yüksekse, disk I/O gecikmesi yaşıyorsun demektir. Çözüm için:
Disk performansını kontrol et.
NVMe SSD gibi daha hızlı diskler kullanabilirsin.
RAID veya SAN gibi disk yapısını gözden geçir.
io_stall_ms
Nedir?
io_stall_ms
Nedir?sys.dm_io_virtual_file_stats
DMV’sinde bulunan io_stall_ms
, SQL Server'ın bir veri veya log dosyasına erişirken ne kadar süre beklediğini (I/O gecikmesi) milisaniye (ms) cinsinden gösterir.
Yüksek
io_stall_ms
değerleri, SQL Server’ın diskten veri okurken veya yazarken gecikme yaşadığını gösterir.Düşük değerler ise I/O işlemlerinin hızlı çalıştığını ifade eder.
Bu değer diskin türüne ve altyapıya bağlı olarak değişir. Ancak genel referans değerleri aşağıdaki gibidir:
NVMe SSD
0.1 - 2 ms
0.1 - 2 ms
0.1 - 5 ms
PCIe SSD
1 - 5 ms
1 - 5 ms
1 - 10 ms
SATA SSD
2 - 8 ms
2 - 10 ms
5 - 15 ms
SAN Storage (Hızlı)
5 - 15 ms
5 - 20 ms
10 - 30 ms
SAN Storage (Orta Seviye)
10 - 20 ms
15 - 30 ms
20 - 50 ms
RAID HDD (SAS 15K RPM)
15 - 30 ms
20 - 40 ms
30 - 60 ms
RAID HDD (SATA 7200 RPM)
20 - 50 ms
30 - 70 ms
50 - 100 ms
Tek Disk HDD (Mekanik)
50 - 150 ms
70 - 200 ms
100 - 300 ms
Page Life Expectancy (PLE) Değerini Kontrol Et
Bellek yetersizliği olup olmadığını anlamak için PLE değerini kontrol edebilirsin:
Page Life Expectancy (PLE) değeri 300 saniyenin (5 dakika) altında ise, belleğin yetersiz olabilir.
Çözüm:
Daha fazla RAM ekle veya
Bellek tüketen sorguları optimize et.
Lazy Writer Durumunu Kontrol Et
Lazy Writer işlemi, kirli sayfaları (dirty pages) bellekte gereğinden uzun tutuyor olabilir. Bunu kontrol etmek için:
Eğer lazy_writer_sleep
süresi çok uzunsa, bellekte gereksiz yük olabilir.
Çözüm:
Bellek tüketen sorguları belirleyip iyileştir.
sp_whoisactive
veyasys.dm_exec_requests
kullanarak en çok kaynak tüketen işlemleri bul.
Alternatif Olarak Transaction Log'u Küçültme
Eğer CHECKPOINT
çalıştırdıktan sonra bile log dosyan temizlenmiyorsa, transaction log dosyanı (LDF) manuel olarak küçültmek yardımcı olabilir:
Dikkat! Eğer transaction log’un hala doluysa ve aktif transaction’lar devam ediyorsa, küçültme işlemi bir işe yaramaz.
Özet
log_reuse_wait_desc
, transaction log’un neden temizlenemediğini gösterir.Değerler, CHECKPOINT, LOG_BACKUP, ACTIVE_TRANSACTION gibi farklı nedenleri açıklıyor.
Çözüm, soruna göre
BACKUP LOG
,DBCC OPENTRAN
,CHECKPOINT
,DBCC SHRINKFILE
gibi işlemlerle sağlanabilir.
Last updated