SQL Server’a gelen anlık sorguları çeşitli filtrelerle listelemek
Aşağıdaki sorgu yardımıyla aşağıda listelediğim soruların cevaplarına erişebilirsiniz.
Command eklenmiş ve şu an aktif olmayan yerlerden istediğinizi açarak sorguyu istediğiniz şekilde filtreleyebilirsiniz.
- Veritabanına şu anda hangi sorgular geliyor?
- Hangi sorgu ne kadar sürüyor?(total_elapsed_s)
- Hangi sorgu hangi sorguyu locklıyor?(blocking_session_id)
- Backup’ın tamamlanma yüzdesi nedir?(percent_complete)
- Sorgular en son hangi bekleme tipi yüzünden beklemiş?(last_wait_type)
- Hangi sorgu running modda hangi sorgu suspend modda bekliyor?(status)
- Hangi sorgu hangi programdan gönderilmiş?(program_name)
- Hangi sorgu hangi sunucudan gönderilmiş?(host_name)
- Hangi sorgu ne zaman başlamış?(start_time)
- Hangi sorgu ne kadar memory kullanıyor?(memory_mb)
select r.total_elapsed_time / 1000.0 as total_elapsed_s,percent_complete,r.blocking_session_id, r.last_wait_type, s.login_name,'MySessionID= ' + cast(r.session_id as varchar) as MySessionID,DB_NAME(r.database_id) as DatabaseName,command ,SUBSTRING(t.text, (r.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(t.text) ELSE r.statement_end_offset END - r.statement_start_offset)/2) + 1) AS statement_text ,r.status,wait_time ,wait_type,wait_resource,text,start_time,s.program_name ,r.last_wait_type,s.host_name,r.granted_query_memory * 8 / 1024 as memory_mb from sys.dm_exec_requests r inner join sys.dm_exec_sessions s on r.session_id = s.session_id cross apply sys.dm_exec_sql_text(r.sql_handle) t where r.session_id <> @@SPID --and r.database_id =DB_ID('Hangi DB'ye gelen sorguları listelemek istiyorsanız') --and t.text like '%text bazlı sorgulama yapmak için text içeriği%' --and r.session_id = sessionid --and s.Login_Name like '%Login bazlı filtreleme%' --and s.program_name LIKE '%Program bazlı filtreleme örneğin Management%' --and r.wait_type !='bekleme tipine göre filtreleme' --and r.blocking_session_id<>0" order by start_time asc
Bazı durumlarda sorgular lock’a düşer ve blocking session id kısmında hangi sorgunun lock’ladığını görebilirsiniz. Fakat bu locklayan sorgu sleeping mode’da ise yukardaki sorgu sonucunda gelmez. Aşağıdaki sorgu yardımıyla bu sorgunun text’ini alabilirsiniz.
select t.text,s.status from sys.dm_exec_connections c INNER JOIN sys.dm_exec_sessions s ON s.session_id=c.session_id CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) t where s.session_id=526--bloklayan sorgunun session id'sini yazmalısınız.