Forum

Uzun süren sor...
 
Bildirimler
Hepsini Temizle

Uzun süren sorguların otomatik mail atılması (Profiler - Duration)

6 Yazılar
3 Üyeler
0 Likes
597 Görüntüleme
(@FatihDEMiR)
Gönderiler: 32
Trusted Member
Konu başlatıcı
 

Merhaba,

Şöyle bir şeye ihtiyacım var.

SQL 2008 R2 kullanmakta olduğumuz bir serverımız var.

Yakalamak istediğim şey ; Uzun süreli çalışan Store Proc/View’lar olduğunda sistemin bana hangi kullanıcı hangi Store Proc/View’ı çalıştırdığını mail atması. Anlık da olabilir, bir job yardımı ile günlük de olabilir.

Örneğin 60 saniyeden uzun süren sorguları bana mail atsın. o Store Proc’u inceleyeyim. Hangi makinanın aldığını görebileyim. Çünkü bazı kullanıcıların aldığı raporlar sistemi çok fazla kasmakta. Hem kimin aldığını hem de hangi raporu almak istediklerini görmem gerekiyor.

Bu konu ile ilgili elinde script/job olan var mı ?

 
Gönderildi : 15/05/2013 17:00

(@kenanilgun)
Gönderiler: 544
Üye
 

Merhaba Fatih bey,

Bu konu ile ilgili gerçekten baya bir araştırma yaptım çok farklı yöntemler mevcut ne kadar sağlıklı olacağı konusunda bir sonuç elde edemedim hepsini oturup detaylı bir şekilde araştırmak lazım konunuz gerçekten güzel ve dikkat çekici. Bu konuyu en iyi şekilde çözebileceğiniz yöntem ise "SQL Server Profiler" olacağını düşünüyorum.

Örnek olarak "SQL Server Profiler" ayarlarınızda yeni bir trace oluşturduğunuz ekranda (Resim1) "Events Selection" tab kısmında "Duration" sütununun üstüne tıkladığınızda filtreleme özellikleri çıkmaktadır. Buradan oluşturacağınız trace ile birlikte istemiş olduğunuz prosedür ve sql sorgularında ortaya çıkacağını göreceksiniz.

Makale : http://www.cozumpark.com/blogs/sql/archive/2008/05/11/sql-server-2005-profiler.aspx  

Resim1)

 
Gönderildi : 02/07/2013 03:05

(@FatihDEMiR)
Gönderiler: 32
Trusted Member
Konu başlatıcı
 

Merhaba Kenan Bey,

Konuya geri dönüş yaptığınız / cevap verdiğiniz için teşekkür ederim.

Sql Jobları ile ilgili gün içersinde bir çok sorguyu kendimize mail attırdığımız için ve bu tür izleme yöntemi alışkanlık haline geldiği için, bu konuyu da o mail jobların içersine gömme hayaliyle yola çıkmıştım ama mümkün olmadığını düşünmeye başladım artık.  

Dediğiniz yöntemi uygulamaktan başka bir seçenek yok sanırım.

 

 
Gönderildi : 10/07/2013 17:10

(@caglarozenc)
Gönderiler: 247
Reputable Member
 

Merhaba, 

Aslında bahsettiğiniz işlemi yapabilirsiniz.

SQL Server DMF ve DMV kullanarak bir procedure oluşturabilir ve o procedure ile o anki aktif kullanılan request ve request texti alabilirsiniz.

Kullanabileceğiniz SQL Cümlesi ise ;

select     

SPID                = er.session_id,

[Login]             = ses.login_name,

Host                = ses.host_name,

DBName              = DB_Name(er.database_id),

BlkBy               = CASE WHEN lb.lead_blocker = 1 THEN -1 ELSE er.blocking_session_id END,

StartTime           = er.start_time,

SUBSTRING(st.text, (er.statement_start_offset/2)+1,

((CASE er.statement_end_offset

          WHEN -1 THEN DATALENGTH(st.text)

          ELSE er.statement_end_offset

          END - er.statement_start_offset)/2) + 1) AS statement_text

FROM sys.dm_exec_requests er

LEFT JOIN sys.dm_exec_sessions ses ON ses.session_id = er.session_id

OUTER APPLY(SELECT lead_blocker = 1

FROM master.dbo.sysprocesses sp

WHERE sp.spid IN (SELECT blocked FROM master.dbo.sysprocesses)

AND sp.blocked = 0

AND sp.spid = er.session_id) lb

cross apply sys.dm_exec_sql_text(er.sql_handle) st 

Yukarıdaki SQL cümlesi ile o an için aktif olan session ve query'leri görüntüleme sansına sahipsiniz.  Bir procedure içerisinde bu kodların olduğunu ve bir job ile bu procedure 5 dk bir dedikledindiğini düşünecek olursanız DATEDIFF(MINUTE,er.start_time,GETDATE()) >=30 gibi bir kullanım ile 30 dk fazla süren qeury takip etmiş olursunuz. Gerisi ise size kalmış. 

 
Gönderildi : 15/07/2013 20:50

(@FatihDEMiR)
Gönderiler: 32
Trusted Member
Konu başlatıcı
 

Merhaba Çağlar Bey,

Teşekkür ederim script için. Bu da bana bir fikir verir. Buradaki script ile bir Store proc yaparım.
Job ile de bir tabloya insert ettiririm. O tablodaki sorguları da kendime mail attırabilirim.

 Teşekkürler. 

 
Gönderildi : 15/07/2013 22:38

(@caglarozenc)
Gönderiler: 247
Reputable Member
 

Merhaba,

Aynı zamanda traceler ile de takip edebilirsiniz diye düşünüyorum 🙂

 

İşinize yaramasına sevindim. 

 
Gönderildi : 16/07/2013 13:55

Paylaş: