Microsoft SQL Server’da Performance Monitor (PerfMon) Kullanımı

Performance Monitor (PerfMon), Microsoft Windows işletim sistemlerinde yerleşik olarak bulunan, sistem performansını detaylı bir şekilde izlemeye ve analiz etmeye yarayan güçlü bir araçtır. SQL Server gibi kaynak tüketimi yüksek uygulamalarda bellek, CPU, disk, ağ, bekleme türleri, sorgu süreleri ve daha fazlasını izlemek için kullanılır.

PerfMon, sistem kaynaklarının geçmiş ve anlık kullanım durumlarını ölçmeye olanak tanır. Bu sayede performans darboğazlarını tespit etmek, sistem optimizasyonu yapmak ve kapasite planlaması gerçekleştirmek mümkün hale gelir.

SQL Server’a özgü Performans Sayaçları, SQL Server içinde 
sys.dm_os_performance_counter olarak bilinen bir katalog görünümü aracılığıyla görüntülenebilir . 

SELECT * FROM sys.dm_os_performance_counters ;  

Gerekli tanımlamadan sonra kurulum işlemine geçelim.

PerfMon, Windows Server ve Windows Client sürümleriyle birlikte önceden yüklü olarak gelir. Ekstra bir yazılım yüklemenize gerek yoktur.

Makina üzerinde Windows + R tuşlarına basın ve daha sonra perfmon yazın ve Enter’a basın. Aynı işlemler başlat menüsünde Performance Monitor yazılarakta girilebilir.

Gelen ekranda systemin genel durumunu görebiliriz.

Performance Monitor bölümüne tıkladığımızda sağ panelde grafik alanı açılır (varsayılan olarak Processor Time yüklüdür).

Performance Monitor sayaç eklemek için yeşil artı işaretine tıklıyoruz.

Açılan pencerede izleyeceğiniz bileşenleri seçebiliriz. İstediğiniz performans nesnesine tıklayıp
ve genişletebilirsiniz. Microsoft, SQL Server ile ilgili performans nesnelerini tanımlamak için “ 
SQL Server: ” önekini kullanır. Ayrıca, pencerenin alt kısmındaki “açıklamayı göster”e tıklayarak her performans sayacı hakkında daha fazla bilgi edinebileceğinizi unutmayın.

SQL Server’ı izlemek için aşağıdaki sayaçlar en çok kullanılan ve kritik olanlardır:

Processor > % Processor TimeCPU’nun toplam kullanım yüzdesi.%70’in üstü sürekliyse CPU yetersizliği var demektir.
Processor > %Privileged Time İşletim sistemi işlemlerinin CPU kullanımı. %20’nin üstü sürücü veya çekirdek sorunu olabilir.
SQLServer:SQL Statistics > Batch Requests/secSQL Server’a gelen toplam sorgu sayısı.
Memory > Available MBytesKullanılabilir bellek miktarı.
SQLServer:Memory Manager > Total Server Memory (KB)SQL Server’ın kullandığı toplam bellek.
SQLServer:Memory Manager > Free Memory (KB)SQL Server’ın boş bellek miktarı.
SQLServer:Memory Manager > Memory Grants PendingBellek tahsisi bekleyen sorgu sayısı. 1’den fazlaysa bellek yetersizliği var demektir.
SQLServer:Buffer Manager > Buffer cache hit ratioVerilerin önbellekten okunma oranı. %90’ın altı bellek baskısı gösterir.
SQLServer:Buffer Manager > Page Life ExpectancyBir sayfanın önbellekte kalma süresi (saniye). 300’ün altına düşmesi bellek yetersizliği demektir.
SQLServer:Buffer Manager > Checkpoint Pages/secCheckpoint işlemiyle diske yazılan sayfa sayısı. Yüksekse yoğun yazma işlemi var demektir.
PhysicalDisk > Avg. Disk sec/ReadSaniyede Diskten veri okuma süresi.
PhysicalDisk > Avg. Disk sec/WriteSaniyede Diske veri yazma süresi.
PhysicalDisk > % Disk TimeDiskin meşgul olduğu zaman yüzdesi. %50’nin üstü disk darboğazı demektir.
PhysicalDisk > % Disk Read/Write TimeOkuma ve yazma işlemlerinin disk kullanım yüzdesi.
SQLServer:Access Methods > Page reads/secSayfa okuma oranı.
SQLServer:Access Methods >Full Scans/secSaniyedeki tam tablo tarama sayısı. Yüksekse indeks eksikliği veya kötü sorgu optimizasyonu var demektir.
SQLServer:Access Methods > Page Splits/secSQL Server’ın veri sayfalarını bölme sıklığı. Yüksekse indeksler fragmente olmuş olabilir.
SQLServer:Access Methods > Forwarded Records/secHeap tablolardaki yönlendirilmiş kayıt sayısı. Yüksekse tabloda fragmantasyon var demektir.
SQLServer:SQL Statistics > SQL Compilations/secSorguların derlenme oranı.
SQLServer:SQL Statistics > SQL Recompilations/secRe-compile edilen sorguların oranı.
SQLServer:Locks > Average Wait Time (ms)Bir kilidin açılmasını bekleyen sorguların ortalama bekleme süresi. 1000 ms üstü ciddi kilitlenme sorunu demektir.
SQLServer:Locks > Number of Deadlocks/secSaniyedeki deadlock sayısı. 0 olmalıdır, aksi halde uygulama tasarım hatası vardır.
SQLServer:Page IO Latch WaitsDisk okuma/yazma gecikmeleri. Yüksekse yavaş disk veya yetersiz bellek olabilir.
SQLServer:Log Write WaitsTransaction log yazma gecikmeleri. Yüksekse log diskinde darboğaz var demektir.
Network Interface > Bytes Total/secAğ trafiği miktarı
Network Interface > Packets Sent-Received/secAğ trafiği yoğunluğu. Ani artışlar ağ tıkanıklığına işaret eder.
LogicalDisk >% Free Space:Diskin ne kadarının boş olduğunu gösterir. %20’nin altı kritik kabul edilir; disk doluluk sorunlarına işaret eder.
LogicalDisk >Avg. Disk sec/Read: Bir okuma işleminin ortalama süresi (saniye). 10 ms altı normal, 20 ms üstü performans sorunu demektir.
LogicalDisk > Avg. Disk sec/Write:Bir yazma işleminin ortalama süresi. 20 ms üstü disk yavaşlığı anlamına gelir.
LogicalDisk > Avg. Disk sec/Transfer: Okuma ve yazma işlemlerinin genel ortalaması. Yüksekse disk darboğazı vardır.

Yukarıdaki seçimleri yaptıktan sonra Add butonuna tıklayarak seçilen sayaçlar sağ bölmede görünmelidir.

Not: Aşağıdaki ekran resminde user time %90 ve üzeriyse sql server kullanır priveleged time %90 üzeriyse diğer kaynaklar kullanır.

Ok butonuna bastıktan sonra Performance Monitor ekranında gerekli olan izlemeler takip edilebilir.

Yukarıdaki tanımlamış olduğumuz değerleri sürekli inceleyebileceğimiz collector’lara ihtiyacımız vardır. Aşağıdaki ekran resimde Data Collector Sets’in altında User Defined’a sağ tıklıyoruz. New ve ardından Data collector Set seçimlerini yapıyoruz.

Gelen ekranda Data collector set yapımıza Name kısmında bir isim veriyoruz. Create manually(Advanced) seçip Next deyip bir sonraki aşamaya geçiyoruz.

Gelen ekranda aşağıdaki gibi Create data logs kısmından Performance counter’ı seçip Next diyoruz.

Gelen ekranda makalenin başında seçtiğimiz ifadeleri seçiyoruz.

Ok dedikten sonra Next deyip bir sonraki aşamaya geçiyoruz.

Oluşturduğumuz Collector Set yapımızın disk uzantısını seçiyoruz. Belirledikten sonra Next deyip bir sonraki hesaplamaya geçiyoruz. Bu collector arka planda 15 saniye bir istenilen değerleri sistemden çekerek logluyor. 

Aşağıdaki ekrana gelene kadar next diyerek hiçbir değişiklik yapmadan ilerliyoruz. Aşağıdaki ekranda da Start this data collector set now’ı seçerek Finish diyoruz.

Oluşturduğumuz Collector yapımızın geldiğini görmüş oluyoruz. Artık oluşturulan yapının üzerine tıklayarak belirlediğimiz değerlerin okunmasını sağlarız.

Takip23 adı Data Collector Sets üzerine gelip stop dedikten sonra inceleme işlemlerimizi yapabiliriz.

Stop ettikten sonra Latest Report bölümünde gerekli inceleme işlemi yapılabilir.

Latest Report veya Report bölümünden de raporlarımızı görebiliriz.

Belirli aralıklarla oluşturduğumuz collector işleminin kayıt edilmesi için aşağıdaki süre kısıtlamasıyla belirli aralıklarla belirlediğimiz uzantıya kayıt atabiliriz.

1 dakika arayla collector’ın belirlediğimiz klasör uzantısına kayıt attığını görmüş olacağız. Directory kısmında kaydedilen dosyasının isim yapısını seçebiliriz.

1 dakika arayla değerlerimizin kaydedildiğini görmüş oluyoruz.

Yukarıdaki yapımız bir süreden sonra dosya sayısının ve boyutunun artmasına sebebiyet verecektir. Bunun için bir task scheduler oluşturup belirli tarihten önceki verilerin silinmesini sağlayabiliriz. Bat uzantılı dosyanın task scheduler’a yüklendiği zaman oluşturulması gerekmektedir. Dosya yolu altındaki tüm klasörleri silme işlemi yapmaktadır. -10 parametresi 10 günden önce verileri silme işlemi yapılmaktadır. Detaylı işlem bilgi ve Task Scheduler kurulumu için ilgili makale okunabilir.

forfiles -p "E:\Dosya_Yolu" -s /D -10 /C "cmd /c if @isdir==TRUE rmdir /s /q @path"

Bir makalede gördüğüm için değinmek istiyorum bir diskin IOPS değerini hesaplamak için ilgili formül kullanılır.

Gerçek IOPS=(Toplam IOPS x Read Yüzdesi)+(Toplam IOPS x Write Yüzdesi x Penaltı Değeri)

Burada gerçek IOPS dediği kavram yukarıdaki örneğimizde seçtiğimiz Disk Transfer/Sec değeridir. İkinci kavram ise Penaltı değeridir.

RAID SeviyesiAçıklamaWrite PenaltyOkuma PerformansıYazma Performansı
RAID 0Stripe, yedekleme yok1Çok yüksekÇok yüksek (en iyi)
RAID 1Mirroring (aynı veriyi 2 diske yazar)2YüksekOrta (çift yazma)
RAID 5Striping + Parity (dağıtılmış parity)4OrtaDüşük (parity hesaplama)
RAID 6Striping + 2x Parity (çift hata toleransı)6OrtaDüşük (daha fazla parity)
RAID 10Stripe + Mirror (RAID 1 + RAID 0 birleşimi)2Çok yüksekYüksek

Aşağıdaki resimde Çerçeve içerisine alınmış bölümden Line bölümünden normal genel özet ekranı olan Report bölümüne girebiliriz.

Not: Yukarıdaki ekran resminde user time %90 ve üzeriyse sql server kullanır priveleged time %90 üzeriyse diğer kaynaklar kullanır.

Bu makalede Microsoft SQL Server’da Performance Monitor (PerfMon) Kullanımı detaylı bir şekilde görmüş olduk. Başka bir makalede görüşmek dileğiyle..

“Öyle ise emrolunduğun gibi dosdoğru ol. Beraberindeki tövbe edenler de dosdoğru olsunlar. Hak ve adalet ölçülerini aşmayın. Şüphesiz O, yaptıklarınızı hakkıyla görür.” Hûd Suresi 112. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir