Calculer le temps d'exécution D'une requête SQL?
Je fournis une fonctionnalité de recherche sur mon site web, lorsque l'utilisateur recherche un enregistrement, je souhaite afficher l'heure à laquelle la requête a été effectuée pour obtenir les mêmes résultats que google. Lorsque nous recherchons quoi que ce soit alors google affiche combien de temps il faut pour obtenir des résultats?
Pour cela, j'ai déclaré une variable @ start dans mon SP et trouver la différence à la fin, comme ci-dessous;
DECLARE @start_time DATETIME
SET @start_time = GETDATE()
-- my query
SELECT * FROM @search_temp_table
SELECT RTRIM(CAST(DATEDIFF(MS, @start_time, GETDATE()) AS CHAR(10))) AS 'TimeTaken'
Est-il un autre moyen facile et rapide, ou une seule ligne de requête avec laquelle nous pouvons retrouver le temps d'une requête prises pour s'exécuter?
J'utilise SQL Server 2005.
8 réponses
Nous surveillons cela à partir du code de l'application, juste pour inclure le temps nécessaire pour établir/fermer la connexion et transmettre des données à travers le réseau. C'est assez simple...
Dim Duration as TimeSpan Dim StartTime as DateTime = DateTime.Now 'Call the database here and execute your SQL statement Duration = DateTime.Now.Subtract(StartTime) Console.WriteLine(String.Format("Query took {0} seconds", Duration.TotalSeconds.ToString())) Console.ReadLine()
J'ai trouvé celui-ci plus utile et simple
DECLARE @StartTime datetime,@EndTime datetime
SELECT @StartTime=GETDATE()
--Your Query to be run goes here--
SELECT @EndTime=GETDATE()
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in milliseconds]
Veuillez utiliser
-- turn on statistics IO for IO related
SET STATISTICS IO ON
GO
Et pour le calcul du temps utiliser
SET STATISTICS TIME ON
GO
Ensuite, il donnera un résultat pour chaque requête . Dans la fenêtre messages près de la fenêtre d'entrée de requête.
declare @sttime datetime
set @sttime=getdate()
print @sttime
Select * from ProductMaster
SELECT RTRIM(CAST(DATEDIFF(MS, @sttime, GETDATE()) AS CHAR(10))) AS 'TimeTaken'
Pourquoi le faites - vous en SQL? Certes, cela montre un temps de requête "vrai" par opposition au temps de requête + temps nécessaire pour mélanger les données dans les deux sens sur le réseau, mais cela pollue votre code de base de données. Je doute que vos utilisateurs s'en soucient - en fait, ils devraient probablement plutôt inclure le temps réseau, car tout cela contribue au temps nécessaire pour voir la page.
Pourquoi ne pas faire le timing dans votre code d'application web? Mis à part toute autre chose, cela signifie que pour les cas où vous ne voulez pas {[2] } Faire un timing, mais vous voulez exécuter le même processus, vous n'avez pas besoin de jouer avec quelque chose dont vous n'avez pas besoin.
Vous pouvez utiliser
SET STATISTICS TIME { ON | OFF }
Affiche le nombre de millisecondes nécessaires pour analyser, compiler et exécuter chaque instruction
Lorsque L'Heure de réglage des statistiques est activée, les statistiques de temps d'une instruction sont affichées. Lorsque désactivé, les statistiques de temps ne sont pas affichées
USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
Essayez ceci
DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()
SET @EndTime = GETDATE()
PRINT 'StartTime = ' + CONVERT(VARCHAR(30),@StartTime,121)
PRINT ' EndTime = ' + CONVERT(VARCHAR(30),@EndTime,121)
PRINT ' Duration = ' + CONVERT(VARCHAR(30),@EndTime -@starttime,114)
Si cela ne le fait pas, essayez de définir L'heure des statistiques sur