Mesurer le temps nécessaire à l’exécution d’une requête t-sql

J’ai deux requêtes t-sql avec SqlServer 2005. Comment puis-je mesurer le temps d’exécution de chacune d’elles?

Utiliser mon chronomètre ne le coupe pas.

Une approche simpliste pour mesurer le “temps écoulé” entre les événements consiste à saisir simplement la date et l’heure actuelles.

Dans SQL Server Management Studio

SELECT GETDATE(); SELECT /* query one */ 1 ; SELECT GETDATE(); SELECT /* query two */ 2 ; SELECT GETDATE(); 

Pour calculer les temps écoulés, vous pouvez saisir ces valeurs de date dans des variables et utiliser la fonction DATEDIFF:

 DECLARE @t1 DATETIME; DECLARE @t2 DATETIME; SET @t1 = GETDATE(); SELECT /* query one */ 1 ; SET @t2 = GETDATE(); SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms; SET @t1 = GETDATE(); SELECT /* query two */ 2 ; SET @t2 = GETDATE(); SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms; 

C’est juste une approche. Vous pouvez également obtenir des temps écoulés pour les requêtes utilisant SQL Profiler.

Si vous souhaitez une mesure plus précise que la réponse ci-dessus:

 set statistics time on -- Query 1 goes here -- Query 2 goes here set statistics time off 

Les résultats seront dans la fenêtre Messages .

Mise à jour (2015-07-29):

À la demande générale, j’ai écrit un extrait de code que vous pouvez utiliser pour chronométrer un cycle entier de procédure stockée, plutôt que ses composants. Bien que cela ne retourne que le temps pris par la dernière exécution, sys.dm_exec_procedure_stats renvoie des statistiques supplémentaires qui peuvent également avoir une valeur:

 -- Use the last_elapsed_time from sys.dm_exec_procedure_stats -- to time an entire stored procedure. -- Set the following variables to the name of the stored proc -- for which which you would like run duration info DECLARE @DbName NVARCHAR(128); DECLARE @SchemaName SYSNAME; DECLARE @ProcName SYSNAME=N'TestProc'; SELECT CONVERT(TIME(3),DATEADD(ms,ROUND(last_elapsed_time/1000.0,0),0)) AS LastExecutionTime FROM sys.dm_exec_procedure_stats WHERE OBJECT_NAME(object_id,database_id)=@ProcName AND (OBJECT_SCHEMA_NAME(object_id,database_id)=@SchemaName OR @SchemaName IS NULL) AND (DB_NAME(database_id)=@DbName OR @DbName IS NULL) 
 DECLARE @StartTime datetime DECLARE @EndTime datetime SELECT @StartTime=GETDATE() -- Write Your Query SELECT @EndTime=GETDATE() --This will return execution time of your query SELECT DATEDIFF(MS,@StartTime,@EndTime) AS [Duration in millisecs] 

Vous pouvez également voir cette solution

mieux encore, cela permettra de mesurer la moyenne de n itérations de votre requête! Idéal pour une lecture plus précise.

 declare @tTOTAL int = 0 declare @i integer = 0 declare @itrs integer = 100 while @i < @itrs begin declare @t0 datetime = GETDATE() --your query here declare @t1 datetime = GETDATE() set @tTotal = @tTotal + DATEDIFF(MICROSECOND,@t0,@t1) set @i = @i + 1 end select @tTotal/@itrs 

Cliquez sur l’icône Statistiques pour afficher, puis exécutez la requête pour obtenir les délais et savoir à quel point votre requête est efficace