SQL Server – Ağırlık yaratan sorgular nasıl tespit edilir ?

Share

Bugünkü  yazımda sizlere SQL Server üzerinde ağırlık yaratan sorguların nasıl tespit edildiği hakkında yardımcı olmaya çalışacağım. Elimin altında her zaman bu sorguyu bulundururum ve çok işime yarar.

Uzun süreli çalışan ve sistemi yoran sorguları net bir şekilde yakalayabiliriz.

Aşağıdaki sorguyu çalıştırdığınızda sistem üzerinde anlık oluşan işlemlerin listesini alarak yoğunluk yaratan sorgularda  total_elapset_time değeri ve cpu_time değeri yüksek olan sorgular tespit edilerek session_ id belirlenip kill edilmesi ile sistemdeki ağırlık kontrol altına alınmış olur.

kill [session_id]  bu şekilde ilgili session yani sorgu kill edilmiş olur.

Uygulamış olduğumuz sorgu sonucunda aşağıdaki başlıklarda sonuçlar görürüz.. Bu başlıkları kısaca açıklayayım.

Status Kolonunda

Suspended : Askıya alınan sesison

Mevcut olmayan bir kaynağa erişim talep edildiğinden bir sorgu askıya alınır. Kaynak kullanıma sunulduğunda sorgu yeniden çalışmaya başlar.

Running : Çalışan sorgular

Sistemde anlık olarak çalışan tüm sorgular

Yüksek disk IO, isteği yerine getirmek için çok fazla veri sayfasına erişilmesi gerektiği anlamına gelir.

Wait Type Kolonunda

wait_type : ASYNC_NETWORK_IO

Verinin SQL Server üzerinden Client’a giderken beklemesi sırasında oluşur. Eğer Client SQL Server’ın veriyi verdiği hızdan daha yavaş işliyorsa ya da network bandwith’i yetmiyorsa ya da büyük veri aktarımı yapılıyorsa oluşabilir.

wait type : PAGEIOLATCH_EX

I\O isteğinde bulunan bir görevin ara bellekte oluşan latch’i beklemesiyle oluşur. Oluşan latch Exclusive modundadır. Uzun süreli beklemeler disk alt sisteminde sorun olduğunu gösterebilir.

wait type : PAGEIOLATCH_SH

I\O isteğinde bulunan bir görevin ara bellekte oluşan latch’i beklemesiyle oluşur. Oluşan latch Shared modundadır. Uzun süreli beklemeler disk alt sisteminde sorun olduğunu gösterebilir.

SELECT sqltext. TEXT,req .total_elapsed_time,
req.session_id ,
req.start_time ,
req.status ,
req.wait_type ,
req.cpu_time ,
req.blocking_session_id ,
ses.*
--,req.*
FROM sys .dm_exec_sessions ses ,sys. dm_exec_requests req
CROSS APPLY sys. dm_exec_sql_text(sql_handle ) AS sqltext
where ses. session_id = req .session_id
--where req.total_elapsed_time > 5000
order by req.total_elapsed_time desc
(Visited 675 times, 1 visits today)