2011-10-14 16 views
19

Aşağıdaki gibi 10 saklı yordamım var: SP1, SP2, ....., SP10 Bu saklı yordamlar bazı şeyler yapar. Bu prosedürleri şu şekilde çalıştırmam gerekiyor: EXECUTE SP1; EXECUTE SP2; ... EXECUTE SP10;SQL Server'da Stored Procedures yürütme süresi nasıl bulunur?

SQL sunucusu, bu yordamların yürütülmesini tamamlayacak şekilde doldurduğunda, tüm bu saklı yordamların neden olduğu satır değişikliklerini gösteren on satır verir. Yapmak istediğim, tüm saklı yordamların yürütülmesi sonrasında SQL Server, her bir Kayıtlı Yordam için yürütme süresini çıkış penceresinde de verir. Bunu yapabilir miyim? Bu görevi başarmak için saklı yordamları değiştirmem gerektiğine eminim ama nasıl yapılacağını bilmiyorum ... Lütfen bana yardım edin. Teşekkürler.

+1

misiniz Özel yazılı uygulamanızdan saklı yordamı çağırıyor musunuz? Eğer öyleyse, hangi dil? – Koekiebox

cevap

13

Bu amaçla Sql Server Profiler'u kullanabilirsiniz. sorgulama ve Saklı yordam.

  1. DECLARE 2 datetime değişkenleri: başlangıç ​​/ bitiş
  2. SET başlangıç ​​

    MSDN: SQL Profiler Data Columns

    SQL Profiler her olay

    bir diğer basit yolu için yürütme zamanı görüntüler = GETDATE()

  3. EXEC SP_NAME
  4. SET uç = GETDATE()
  5. Uygulama süresi - uç ve yönetim stüdyosu veya bir çıktı bölmesiyle başka bir ortam varsayarsak
0

capture and display execution time

kullanımı iki parametre datetime tip ve set bir fark elde etmek için, ikinci tsql sonra getdate() kullanarak ve son olarak datediff işlevini kullanın saklı yordam

içinde tsql başlamadan önce getdate() kullanılarak ve set

20

başlangıç ​​arasındaki fark;

SET STATISTICS TIME ON 
EXEC SP1 
EXEC SP2 
... 
SET STATISTICS TIME OFF 
3

böyle SQL Server Profiler olarak bu araçları kullanarak yapmak yolu vardır, ancak basit bir şekilde zaman yazdırmak için bir çizgi ile çevrelenmiş her proc çalıştırmaktır:

print convert(varchar, getdate(), 21) 
EXEC PROC SP1 
print convert(varchar, getdate(), 21) 
+0

neden varchar? Temel olarak yapmanız gereken, prosedürün –

+0

prosedürünü çalıştırmadan önce ve sonra milisaniye farkını almasıdır. Böylece, '2011-10-14 12: 32: 39.403' gibi biçimlendirilmiş bir çıktı elde edebilirsiniz.Tarih olarak ayrılmanız size milisaniye vermeyecektir, ve _only_ bildirme farkı, ** çalıştığı zaman, katılımsız olması durumunda ** 'nin fazladan verilerini kaybeder. – Widor

+0

teşekkürler ... neredeyse her yöntem çalıştı! – Azeem

4
declare @start datetime = getdate() 

-- your SQL statements 
exec dbo.MyStoredProcedure 

declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate()) 
İlgili konular