Sql server'da hangi proje ve sorgular en çok cpu harcıyor?

02 Mart 2016 2 dk okuma süresi 117 okunma

Projelerde performans için sql sorgularının optimize edilmesi kaçınılmazdır. Özellikle entity framework gibi bir orm aracı kullanıyorsanız hangi sorguların ne kadar cpu kullandığını ve çalışma sürelerini görmek istersiniz. Eğer 3. parti bir yazılım kullanmıyorsanız aşağıdaki 2 sogu işinizi fazlasıyla görecektir. İlk sorgu en çok cpu kullanan veritabanlarını, diğeri ise en çok cpu kullanan sorguları listelemektedir. Bu sonuçlara göre neyi nasıl optimize etmeniz gerektiğine daha kolay karar verebilirsiniz.


En çok cpu kullanan veritabanlarını listeler.

WITH DB_CPU_Stats
    AS
    (SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms]
     FROM sys.dm_exec_query_stats AS qs
     CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
                  FROM sys.dm_exec_plan_attributes(qs.plan_handle)
                  WHERE attribute = N'dbid') AS F_DB
     GROUP BY DatabaseID)
    SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
           DatabaseName, [CPU_Time_Ms]/1000 as [CPU_Time_Sec],
           CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
    FROM DB_CPU_Stats
    WHERE DatabaseID > 4 -- sistem veritabanlari
    AND DatabaseID <> 32767 -- ResourceDB
    ORDER BY row_num OPTION (RECOMPILE);

En çok cpu kullanılan 200 sorguyu listeler.

select top 200
    qs.sql_handle,
    qs.execution_count,
    qs.total_worker_time,
    total_CPU_inSeconds = qs.total_worker_time/1000000, -- microsaniye
    average_CPU_inSeconds = (qs.total_worker_time/1000000) / qs.execution_count, --microsaniye
    qs.total_elapsed_time,
    total_elapsed_time_inSeconds = qs.total_elapsed_time/1000000, -- microsaniye
   st.text,
   qp.query_plan
from
    sys.dm_exec_query_stats as qs
    cross apply sys.dm_exec_sql_text(qs.sql_handle) as st
    cross apply sys.dm_exec_query_plan (qs.plan_handle) as qp
order by qs.total_worker_time desc


Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
OSX üzerinde Docker ile Sql Server yüklemek ve yönetmek

Redis nedir, kullanım yerleri, avantaj ve dezavantajları nedir? Populerliği her geçen gün artan redis, in-memory tabanlı key-value mantığı ile çalışan ve yüksek performans sağlayan açık kaynak nosql veritabanıdır.

Mssql kullanan herkes en az bir kere kullanmıştır fakat aradaki farkı pek sorgulamazlar. Bu yazıda stored procedure ile function arasındaki farkların neler olduğunu öğrenebilirsiniz.