SQL Server performans sorunlarında CPU, en yaygın darboğaz kaynaklarından biridir. Ani yavaşlamalar, zaman aşımı hataları ve yetersiz kaynak uyarıları genellikle aşırı CPU tüketen sorgulardan kaynaklanır. Bu makalede, CPU kaynaklı bir sorunu nasıl teşhis edeceğinizi, hangi sorguların sorunlu olduğunu nasıl bulacağınızı ve sisteminizin CPU durumunu nasıl anlık olarak izleyeceğinizi adım adım ele alacağız.
Veritabanı yöneticileri (DBA) için CPU darboğazı, sistemin nefes alamaması demektir. Bir MSSQL örneğinde CPU baskısını teşhis etmek, kullanıcı deneyimini doğrudan iyileştirir. Sadece işlemci kullanımına bakmak yanıltıcı olabilir; bu yüzden “neden-sonuç” ilişkisi kuran şu sayaçlara odaklanmalıyız:
CPU üzerindeki yükü anlamak için Windows Performance Monitor (PerfMon) üzerinden şu iki ana göstergeyi takip etmek hayati önem taşır:
- % Processor Time (Processor Information):İşlemcinin ne kadarının aktif olarak kullanıldığını gösterir. Bu değerin sürekli olarak %80-90 bareminin üzerinde seyretmesi, sistemin “tükenme” noktasına geldiğinin en net sinyalidir. Eğer bu seviye kalıcıysa, donanım yetersizliği veya optimize edilmemiş sorgular söz konusudur.
- SQL Statistics: Batch Requests/Sec:Saniyede SQL Server’a gelen sorgu (batch) sayısını ölçer. Eğer CPU kullanımıyla doğru orantılı olarak bu sayı çok yüksekse, veritabanı aşırı trafik altında demektir. Ancak Batch Requests düşük ama CPU yüksekse, muhtemelen kötü yazılmış tek bir sorgu tüm işlemciyi rehin alıyordur.
Sadece yukarıdaki iki değer her zaman yeterli olmayabilir. Gerçek bir CPU baskısı olup olmadığını anlamak için şu “gizli” kahramanlara da bakmalısınız.
| Sayaç (Counter) | Açıklama | Kritik Eşik |
| System: Processor Queue Length | İşlemci sırasında bekleyen iş parçacığı sayısı. | CPU çekirdek sayısının 2 katından fazlası problemdir. |
| SQLServer: Wait Statistics | SOS_SCHEDULER_YIELD bekleme türü. | Yüksek değerler, CPU’nun görevleri yetiştiremediğini gösterir. |
| Compilations/sec | Saniyedeki sorgu derleme sayısı. | Yüksekse, sorgular “re-use” (tekrar kullanım) edilemiyor, CPU sürekli plan çiziyor demektir. |
SQL Server’da CPU kullanımını artıran başlıca yazılımsal sebepler şunlardır:
- Eksik İndeksler: SQL Server veriyi bulmak için tüm tabloyu tarar (Table Scan), bu da yoğun CPU maliyeti doğurur.
- Implicit Conversion (Örtülü Dönüşüm): Veri tiplerinin uyuşmaması nedeniyle SQL’in her satırda dönüştürme işlemi yapması.
- Aşırı Paralellik (MAXDOP): Küçük bir sorgunun tüm CPU çekirdeklerini kullanmaya çalışması (CXPACKET beklemeleri).
- Sık Derleme (Recompilation): Geçici tabloların yanlış kullanımı veya sürekli değişen parametreler nedeniyle işlemcinin her seferinde yeni “yol haritası” çizmesi.
Eğer CPU %90 üzerindeyse şu adımları izleyin:
- En Çok CPU Tüketen Sorguları Bulun: sys.dm_exec_query_stats DMV’sini kullanarak işlemciyi en çok yoran ilk 10 sorguyu tespit edilebilir.
- Execution Plan İncelemesi: Bu sorguların planlarında “Index Scan” veya “Parallelism” operatörlerini kontrol edilebilir.
- İstatistikleri Güncelleyin: Güncel olmayan istatistikler, SQL Server’ın yanlış ve ağır yollar seçmesine neden olur.
Donanım eklemek (CPU artırmak) her zaman çözüm değildir. Kötü optimize edilmiş bir sorgu, 64 çekirdekli bir sunucuyu bile saniyeler içinde kilitleyebilir.
Yukarıdaki adımları izleyerek, CPU kaynaklı performans sorunlarını kolay bir şekilde tespit ederek ve sisteminizin sağlıklı kalmasını sağlayabilirsiniz.
Başka makalede görüşmek dileğiyle..
“İnsanların en hayırlısı insanlara faydalı olandır.” (Hadis)
