27 Oca by NURULLAH ÇAKIR

Extended Events Kullanarak Performans Monitoring Yapmak

Veritabanında performans problemi olduğunda yapacağımız ilk işlem aslında gelen sorguları anlık olarak dmw’leri kullanarak listelemektir. “SQL Server’a gelen anlık sorguları çeşitli filtrelerle listelemek” isimli makalemde bu işlem için güzel bir sorgu bulabilirsiniz. Bu sorguyu kullanarak performans probleminin kaynağı hakkında il etapta bir fikir edinebilirsiniz. Wait_type kısmına bakarak sorguların neden beklediğini görebilirsiniz. İyi bir veritabanı uzmanı genelde bu sorguyu kullanarak sorunun nedenini anlar ve çözüm üretebilir. Ama bazen uzun süren sorguları tespit edip bu sorguları teker teker iyileştirmek isteyebilirsiniz. Bu noktada Extended Events kullanarak uzun süren sorguları yakalayacağız.

SSMS üzerinde Management-> Extended Events ->Session’a gelerek sağ tıklıyoruz ve  New Session Wizard diyoruz.

 

Gelen ekranda aşağıdaki gibi session’a bir isim veriyoruz. Start the event session at server startup’ı seçmiyorum. Çünkü server başladığında bu session’ın otomatik olarak başlamasını istemiyorum. Next diyerek ilerliyoruz. Bir sonraki ekranda Do not use template diyerek tekrar next diyorum.

 

 

Gelen ekranda Event Library yazan yere completed yazıyorum ve gelen listeden aşağıdaki event’lara çift tıklayarak seçiyorum. Yaptığım seçimlerin sağ tarafta selected events kısmında listelendiğini görüyorum. Next diyerek ilerliyorum.

 

 

Bir sonraki ekranda aşağıdaki seçenekleri seçiyorum.

 

Client hostname

Client app name

Database name

Sql text

User name

 

Bir sonraki ekranda aşağıdaki gibi filter koyacağız. Veritabani_ismi yazan yere kendi veritabanı isminizi yazmalısınız. Duration>1000000 diyerek 1 saniyeden uzun süren sorguları yakalamak istediğimizi belirtmiş oluyoruz.

 

 

 

Ya da oluşturduktan sonra da session üzerinde sağ tıklayıp properties’den Events’a gelip Configure diyerek filtre koyabilirsiniz. Eğer oluşturma aşamasında değil de sonradan filtre koyacaksanız seçtiğiniz tüm event’lar için teker teker filtre koymanız gerekir. Örneğin bizim örneğimizde aşağıdaki gibi sp_statement_completed’ı seçerek Filter’a bir filtre yazarsanı rpc_completed’a tıkladıktan sonra filtre kısmına gelirseniz aynı işlemi burada da yapmanız gerekecektir.

 

 

Daha sonraki ekranlarda next next finish diyerek işlemi tamamlıyoruz ve oluşan session’ın üzerine gelip aşağıdaki gibi start ediyoruz.

 

 

Session üzerinde watch live data diyerek 1 saniyen uzun süren sorguları görebilirsiniz. Gelen sonuç kümesinde filtreleme yapmak istiyorsanız aşağıdaki gibi sol üst köşeye sağ tıklayarak Filter by this Value diyerek bu işlemi gerçekleştirebilirsiniz.

 

Loading

2 Comments

  1. Selamlar,

    Duration’ın birimi microsecond olduğu için, 1 sn 1.000.000 microsecond oluyor bildiğim kadarıyla.

    1. Evet SQL Server Profiler’dan kalma bir alışkanlık. Profiler kullanırken 1 saniye için 1000 yazıyorduk. Makalede gerekli düzeltmeyi yaptım. Teşekkürler.

Bir yanıt yazın

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