Zaman aralığına göre saklı yordam başına çağrı sayısını nasıl izleyebilirim?


10

Bazı performans sorunlarını teşhis etmek için, sistem performansına kıyasla belirli prosedürlerin kaç kez çağrıldığını daha iyi anlamak istiyorum. Belirli bir zaman aralığında her bir prosedürün kaç kez çağrıldığını öğrenmenin bir yolu var mı?

Yanıtlar:


17

Bunu (ve daha fazlasını) Dinamik Yönetim Görünümlerinden (DMV'ler) alabilirsiniz. Belirli bir saklı yordamın istatistiklerini almak için aşağıdaki sorguyu deneyin.

SELECT
    OBJECT_NAME(qt.objectid)
  , qs.execution_count AS [Execution Count]
  , qs.execution_count / DATEDIFF(Second, qs.creation_time, GETDATE()) AS [Calls/Second]
  , qs.total_worker_time / qs.execution_count AS [AvgWorkerTime]
  , qs.total_worker_time AS [TotalWorkerTime]
  , qs.total_elapsed_time / qs.execution_count AS [AvgElapsedTime]
  , qs.max_logical_reads
  , qs.max_logical_writes
  , qs.total_physical_reads
  , DATEDIFF(Minute, qs.creation_time, GETDATE()) AS [Age in Cache]
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY 
    sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
    qt.[dbid] = DB_ID()
AND qt.objectid = OBJECT_ID('StoredProcedureName')
OPTION (RECOMPILE);

En sık yürütülen prosedürlere bakmak için:

SELECT
    OBJECT_NAME(qt.objectid)
  , qs.execution_count AS [Execution Count]
  , qs.execution_count / DATEDIFF(Second, qs.creation_time, GETDATE()) AS [Calls/Second]
  , qs.total_worker_time / qs.execution_count AS [AvgWorkerTime]
  , qs.total_worker_time AS [TotalWorkerTime]
  , qs.total_elapsed_time / qs.execution_count AS [AvgElapsedTime]
  , qs.max_logical_reads
  , qs.max_logical_writes
  , qs.total_physical_reads
  , DATEDIFF(Minute, qs.creation_time, GETDATE()) AS [Age in Cache]
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY 
    sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
    qt.[dbid] = DB_ID()
ORDER BY
    qs.execution_count DESC
OPTION (RECOMPILE);

Bildirilen değerler, son yeniden başlatmadan bu yana birikimlidir. Belirli bir süre boyunca ölçüm yapmak istiyorsanız, bekleme istatistiklerini sıfırlamak için aşağıdaki komutu kullanın.

DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR);

Gün boyunca sabit zaman aralıklarını ölçmek istiyorsanız, sorgu çıktısını bir aracı işi aracılığıyla bir tabloya aktarabilir ve a) iki çalışma arasındaki değerleri hesaplayabilir veya b) aracı işindeki son adım olarak bekleme istatistiklerini sıfırlayabilir .

Alternatif olarak, profil oluşturucu izini yakalayın ve İzi Temizle ile çalıştırın .


Çok fazla sonuç kümesi alıyorum ama tam olarak değil gibi görünüyor. Örneğin, aynı nesne birkaç nesne nesne_adı yanıtı yanıtını görüyorum ancak ayrıntıların çoğu birkaç istisna dışında aynıdır. Eşleşen sütun ayrıntıları: ExecutionCount, Call / Second, AgeInCache. Eşleşmeyen sütun ayrıntıları: AvgWorkerTime, TotalWorkerTime, AvgElapesedTime. Çoktan çok sonuca ne sebep olur?
kstubs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.