Microsoft SQL Server yönetiminde karşılaşılan en büyük zorluklardan biri, sistem kaynaklarını tüketen “maliyetli” sorguların anlık olarak tespit edilmesidir. Uygulama katmanından gelen binlerce istek arasında, yalnızca belirli bir veritabanını etkileyen veya belirli bir servis kullanıcısı (login) üzerinden sistemi yoran işlemleri ayıklamak, etkili bir performans tuning süreci için şarttır.
SQL Profiler, veritabanı motorunda gerçekleşen olayları (events) gerçek zamanlı olarak yakalamamıza olanak tanır. Ancak izleme verilerini sadece ekran üzerinden takip etmek, geçmişe dönük analiz yapmayı zorlaştırır. Bu makalede, iş yükünü optimize etmek amacıyla; belirli bir veritabanı ve kullanıcı özelinde, 1000 ms (1 saniye) barajını aşan sorguların filtrelenerek otomatik olarak bir tabloya (ProfilerAdvisorTakip23) nasıl kaydedileceğini ele alacağız. Bu yöntem, verileri T-SQL ile sorgulanabilir hale getirerek raporlama kolaylığı sağlar.
SSMS arayüzünde Tools bölümünden açabiliriz.

İkinci olarak windows üzerinden kullandığınız sql server sürümüne göre SQL Server Profiler’ı Run As Administrator ile açıyoruz.

Gelen ekranda File->New Trace diyoruz.

Sql server profiler yapısını hangi instance üzerinde kullanmak istiyorsak ilgili instance’a bağlantı gerçekleştirilir.

Gelen ekranda General kısmında oluşturacağımız Trace yapımıza bir isim veriyoruz.

Gelen ekranda Event Selection’a geliyoruz ve aşağıdaki gibi Sadece RPC:Completed ve SQL:BatchCompleted’ı seçiyoruz ve diğerlerinden seçimi kaldırıyoruz. Daha sonra aşağıdaki Show all columns’a tıklıyoruz ve RPC:Completed ve SQL:BatchCompleted üzerindeki seçimi iptal edip tekrar seçiyoruz.(Böylelikle Show all columns’a tıkladıktan sonra gelen kolonlarıda seçmiş oluyoruz.)

Yukarıdaki ifadeleri seçtikten sonra Column Filters.. kısmında neler üzerinde işlem yapacağımızı belirliyoruz.

DatabaseName kısmında like bölümünü açıp işlem yapacağımız veritabanını belirtiriz.

Exclude rows that do not contain values checkbox’ın işaretlenmesi gerekmektedir.

Duration kısmında Grater than or equal kısmında belirli bir milisaniyenin üzerinde olan değerleri çekiyoruz.

LoginName kısmında hangi login üzerinde işlem yapmak istiyorsak ilgili login seçilmektedir. Farklı filtreleme ifadeleri eklemek istiyorsak ilgili ifadeler seçilebilir.

Ok denilip işlemler tamamlanır. Run denilip oluşturduğumuz Trace’i başlatıyoruz.

İlgili Trace belirli bir süre çalıştıktan sonra okuma yapmamız veya okumak istediğimiz ifadeyi göremeyebiliriz. Bunun için trace sonucunu kaydetme gereği duyarız.

Trace’i durduruyoruz ve File->Save As->Trace Table… diyoruz.

Tablomuzu hangi sunucu ve instance üzerine kaydetmek istiyorsak ilgili yapıya giriş yapılır.

Gelen ekranda bağlantı sağlanan instance üzerinde hangi veritabanında hangi schema olduğunu belirtip tablo ismini kendimiz yapımıza uygun bir şekilde belirtiyoruz.

Veritabanı altında tablomuzun başarılı bir şekilde oluştuğu görürüz.

Tablomuza ilgili değerlerin kaydedildiği görülmektedir. SQL Profiler üzerinden yakalanan verilerin doğrudan bir SQL tablosuna aktarılması, ham izleme verilerini anlamlı birer içgörüye dönüştürür. ProfilerAdvisorTakip23 tablosunda biriken veriler sayesinde; hangi sorguların neden yavaş çalıştığını, bu sorguların günün hangi saatlerinde yoğunlaştığını ve hangi execution planların iyileştirilmesi gerektiğini somut verilerle analiz edebiliriz.
1000 ms üzerindeki filtreleme sayesinde, sistemdeki “gürültüyü” azaltarak yalnızca gerçek performans sorunlarına odaklanmak mümkün hale gelmiştir. Unutulmamalıdır ki; Profiler’ın canlı sistemlerde ek yük (overhead) oluşturma potansiyeli vardır. Bu nedenle, filtreleme seçeneklerinin doğru kullanılması ve elde edilen veriler ışığında gerekli indeksleme veya sorgu revizyonlarının yapılması, sürdürülebilir bir veritabanı performansı için hayati önem taşır.

SQL Profiler’ın ilerleyen sürümlerde yerini tamamen Extended Events (XEvents) yapısına bırakacağı öngörüldüğünden, benzer filtreleme mekanizmalarını XEvents kullanarak kurmak, uzun vadeli bir strateji olacaktır. Ancak hızlı müdahale ve tanı koyma aşamasında Profiler, tabloya yazma özelliğiyle hala DBA’lerin en pratik yardımcılarından biridir.
Trace’i tablo olarak kaydettikten sonra Database Engine Tuning Advisor(DTA) ‘a analiz ettirebilirsiniz.
Başka makalede görüşmek dileğiyle..
“Öyle ise emrolunduğun gibi dosdoğru ol.” Hud-112
