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 Time | CPU’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/sec | SQL Server’a gelen toplam sorgu sayısı. |
Memory > Available MBytes | Kullanı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 Pending | Bellek tahsisi bekleyen sorgu sayısı. 1’den fazlaysa bellek yetersizliği var demektir. |
SQLServer:Buffer Manager > Buffer cache hit ratio | Verilerin önbellekten okunma oranı. %90’ın altı bellek baskısı gösterir. |
SQLServer:Buffer Manager > Page Life Expectancy | Bir sayfanın önbellekte kalma süresi (saniye). 300’ün altına düşmesi bellek yetersizliği demektir. |
SQLServer:Buffer Manager > Checkpoint Pages/sec | Checkpoint işlemiyle diske yazılan sayfa sayısı. Yüksekse yoğun yazma işlemi var demektir. |
PhysicalDisk > Avg. Disk sec/Read | Saniyede Diskten veri okuma süresi. |
PhysicalDisk > Avg. Disk sec/Write | Saniyede Diske veri yazma süresi. |
PhysicalDisk > % Disk Time | Diskin meşgul olduğu zaman yüzdesi. %50’nin üstü disk darboğazı demektir. |
PhysicalDisk > % Disk Read/Write Time | Okuma ve yazma işlemlerinin disk kullanım yüzdesi. |
SQLServer:Access Methods > Page reads/sec | Sayfa okuma oranı. |
SQLServer:Access Methods >Full Scans/sec | Saniyedeki tam tablo tarama sayısı. Yüksekse indeks eksikliği veya kötü sorgu optimizasyonu var demektir. |
SQLServer:Access Methods > Page Splits/sec | SQL Server’ın veri sayfalarını bölme sıklığı. Yüksekse indeksler fragmente olmuş olabilir. |
SQLServer:Access Methods > Forwarded Records/sec | Heap tablolardaki yönlendirilmiş kayıt sayısı. Yüksekse tabloda fragmantasyon var demektir. |
SQLServer:SQL Statistics > SQL Compilations/sec | Sorguların derlenme oranı. |
SQLServer:SQL Statistics > SQL Recompilations/sec | Re-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/sec | Saniyedeki deadlock sayısı. 0 olmalıdır, aksi halde uygulama tasarım hatası vardır. |
SQLServer:Page IO Latch Waits | Disk okuma/yazma gecikmeleri. Yüksekse yavaş disk veya yetersiz bellek olabilir. |
SQLServer:Log Write Waits | Transaction log yazma gecikmeleri. Yüksekse log diskinde darboğaz var demektir. |
Network Interface > Bytes Total/sec | Ağ trafiği miktarı |
Network Interface > Packets Sent-Received/sec | Ağ 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 Seviyesi | Açıklama | Write Penalty | Okuma Performansı | Yazma Performansı |
---|---|---|---|---|
RAID 0 | Stripe, yedekleme yok | 1 | Çok yüksek | Çok yüksek (en iyi) |
RAID 1 | Mirroring (aynı veriyi 2 diske yazar) | 2 | Yüksek | Orta (çift yazma) |
RAID 5 | Striping + Parity (dağıtılmış parity) | 4 | Orta | Düşük (parity hesaplama) |
RAID 6 | Striping + 2x Parity (çift hata toleransı) | 6 | Orta | Düşük (daha fazla parity) |
RAID 10 | Stripe + Mirror (RAID 1 + RAID 0 birleşimi) | 2 | Çok yüksek | Yü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