Bu makalede sql server üzerinde dönen sorguların maliyeti en yüksek olan sorguları görmüş olacağız. Bu sayede hangi sorgunun sql üzerinde maliyetini görüp ona göre bakım performans işlemlerimizi yapmış olacağız. Maliyetli sorguları bulmak için aşağıdaki sorgu kullanılmaktadır.
select top 50 coalesce (db_name(st.dbid), db_name(convert (int, pa.value)), 'Empty') as DBName,
qs.last_execution_time as LastExecutionTime,
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS StatementText,
st.text as ProcedureTextOrBatchText,
qs.execution_count as ExecutionCount,
(qs.total_worker_time/1000) as CPUTimeTotal,
((qs.total_worker_time/1000)/qs.execution_count) as CPUTimeAvg,
(qs.total_elapsed_time/1000) as DurationTimeTotal,
((qs.total_elapsed_time/1000)/qs.execution_count) as DurationTimeAvg,
qs.total_physical_reads as PhysicalReadsTotal,
(qs.total_physical_reads/qs.execution_count) as PhysicalReadsAvg,
qs.total_logical_reads as LogicalReadsTotal,
(qs.total_logical_reads/qs.execution_count) as LogicalReadsAvg
from sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(sql_handle) st
cross apply sys.dm_exec_query_plan(plan_handle) qp
cross apply sys.dm_exec_plan_attributes(qs.plan_handle) pa
where attribute = 'dbid'
and execution_count> 1000
--order by CPUTimeTotal desc
order by CPUTimeAvg desc
--order by DurationTimeTotal desc
--order by DurationTimeAvg desc
--order by PhysicalReadsTotal desc
--order by PhysicalReadsAvg desc
--order by LogicalReadsTotal desc
--order by LogicalReadsAvg desc

Sorgunun hangi veritabanı üzerinde çalıştığını, sorgunun çalışma sayısını, ne kadar CPU’da harcadığı zamanı, diskten veya memoryden ne kadar okuma yaptını ve toplam harcanan zamanı göstermektedir.
Sorgu sonunda bulunan order by ifadelerini aktif ederek sıralama işlemini istediğimiz koluna göre yapabiliriz.
--order by DurationTimeTotal desc
--order by DurationTimeAvg desc
--order by PhysicalReadsTotal desc
--order by PhysicalReadsAvg desc
--order by LogicalReadsTotal desc
--order by LogicalReadsAvg desc
Bu makalede sql server üzerinde dönen sorgulardan maliyeti en fazla olan 50 sorgumuzu görmekteyiz. İlgili script çalıştırılarak performans tuning yapılabilir.
Başka bir makalede görüşmek dileğiyle..
“İlminle övünme, Şeytan’a bak!” Araf-12