Mesurer le temps qu'il faut pour exécuter une requête T-sql

j'ai deux requêtes T-sql utilisant SqlServer 2005. Comment puis-je mesurer le temps que chacun met à courir?

utiliser mon chronomètre ne suffit pas.

115
demandé sur TheMoot 2012-07-26 21:49:59

5 réponses

une approche simpliste pour mesurer le" temps écoulé " entre les événements est de simplement saisir la date et l'heure actuelles.

in 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 les 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 les temps écoulés pour les requêtes en utilisant SQL Profiler.

117
répondu spencer7593 2012-07-26 18:46:11

si vous voulez 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 affichés dans la fenêtre Messages .

mise à Jour (2015-07-29):

par requête populaire, j'ai écrit un extrait de code que vous pouvez utiliser pour chronométrer une procédure stockée entière, plutôt que ses composants. Bien que cela ne renvoie l'heure de la dernière course, il ya un statistiques supplémentaires retournées par sys.dm_exec_procedure_stats qui peuvent également être de 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)
193
répondu Michael Goldshteyn 2015-07-29 18:14:11
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 aussi voir cette solution

10
répondu atik sarker 2018-04-26 00:57:12

encore mieux, cela mesurera la moyenne des 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
6
répondu HumbleWebDev 2016-06-28 19:05:19

cliquez sur l'icône des statistiques pour afficher et ensuite lancer la requête pour obtenir les horaires et de savoir à quel point votre requête est efficace

-1
répondu Ashish Patel 2018-05-23 22:43:53