SQL Server Management Studio, comment réduire le temps d'exécution en millisecondes


220

Lorsque je soumets un lot (par exemple, effectue une requête) dans SSMS, je vois le temps qu'il a fallu pour exécuter dans la barre d'état. Est-il possible de configurer SSMS pour afficher le temps de requête avec une résolution en millisecondes?

Voici la barre dont je parle avec la section d'intérêt entourée en rouge:

entrez la description de l'image ici


3
Ne répondant pas vraiment à votre question, mais vous pouvez utiliser SQL Server Profiler (un outil de journalisation) pour vérifier la durée de votre requête. La durée est mesurée en millisecondes.
AGuyCalledGerald

Réponses:


66

Je me débattais avec ça jusqu'à ce que je trouve ça ...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

De plus, si vous ouvrez la fenêtre Propriétés, vous pouvez trouver un "temps de connexion écoulé" magique qui peut vous donner un peu de temps d'exécution ... J'espère que cela aide ...


18
La partie concernant la fenêtre Propriétés est vraiment la réponse à ce fil. "Elapsed Time" est assis là à vous regarder en face.
Eric

Et je définis maintenant cette réponse comme la réponse acceptée, car elle est la plus correcte.
Michael Goldshteyn

363

Ce que vous voulez faire, c'est ceci:

set statistics time on

-- your query

set statistics time off

La sortie ressemblera à ceci dans votre fenêtre Messages:

Temps d'exécution SQL Server: temps CPU = 6 ms, temps écoulé = 6 ms.


1
Mais cela place le timing dans la fenêtre Messages, ce qui signifie que je dois y retourner manuellement après avoir effectué la requête. De plus, les résultats semblent ne pas avoir de sens, par exemple: temps CPU = 1357 ms, temps écoulé = 169 ms. Comment cela s'additionne, même si j'ai 8 cœurs avec hyperthreading (c'est-à-dire 16 virtuels)?
Michael Goldshteyn

2
@MichaelGoldshteyn quant à la raison pour laquelle votre temps CPU est plus long, c'est parce que vous avez un CPU multicœur ou hyperthreadé.

25
@MichaelGoldshteyn 1357/8 = 169,625. Coïncidence?
Dan J

3
@DanJ, ​​la DB ne fait pas tout de la mémoire. Souvent, les E / S sont impliquées et les E / S signifient plus de temps écoulé.
Michael Goldshteyn

9
@binki Vous avez raison, mon commentaire vieux de 1 555 jours était inexact.
benizi

125

Activez les statistiques client en effectuant l'une des opérations suivantes:

  • Menu: Requête> Inclure les statistiques du client
  • Barre d'outils: cliquez sur le bouton (à côté de Inclure le temps d'exécution réel)
  • Clavier: Shift-Alt-S

Ensuite, vous obtenez un nouvel onglet qui enregistre les timings, les données d'E / S et les nombres de lignes, etc. pour (jusqu'à) les 10 dernières exections (plus les moyennes!):

entrez la description de l'image ici


C'est la même chose que la réponse de @Ymagine First de novembre 2012. Voir la réponse ci-dessus ...
Bogdan Bogdanov

Ce site (ironiquement) avait une erreur SQL à l'époque, j'ai donc extrait les informations clés d'un cache Google et publié en tant que nouvelle réponse. Je ne voulais pas voler le crédit et j'aurais peut-être dû plutôt modifier la réponse originale.
NickG

En fait, il semble que je n'ai pas assez de points de répétition pour éditer les questions, c'est probablement pourquoi je ne l'ai pas fait.
NickG

3
Pour info les unités pour les statistiques de temps sont en millisecondes: brentozar.com/archive/2012/12/…
congusbongus

17

Pour obtenir le temps d'exécution en tant que variable dans votre proc:

DECLARE @EndTime datetime
DECLARE @StartTime 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] 

ET voir ça

Mesurer les performances des requêtes: «Coût des requêtes du plan d'exécution» vs «Temps pris»


1
Datepart NS représente la nanoseconde, pour les millisecondes, utilisez MS
Milan Matějka

12

J'étais après la même chose et suis tombé sur le lien suivant qui était génial:

http://www.sqlserver.info/management-studio/show-query-execution-time/

Il montre trois façons différentes de mesurer les performances. Tous bons pour leurs propres forces. Celui que j'ai choisi était le suivant:


DECLARE @ Time1 DATETIME

DECLARE @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Insérez une requête ici

SET @ Time2 = GETDATE ()

SELECT DATEDIFF (MILLISECOND, @ Time1, @ Time2) AS Elapsed_MS


Cela montrera les résultats de votre requête suivis du temps qu'il a fallu pour terminer.

J'espère que cela t'aides.


J'ai trouvé cela inconstant, parfois montre le temps et parfois juste 0.
RMati

2

Je ne sais pas comment étendre la barre d'informations.

Mais vous pouvez obtenir les horaires définis par défaut pour toutes les requêtes affichées dans l'onglet "Messages".

Dans une fenêtre de requête, accédez à l'élément du menu de requête, sélectionnez "Options de requête" puis sélectionnez "Avancé" dans le groupe "Exécution" et cochez les cases "Définir l'heure des statistiques" / "Définir les statistiques d'E / S". Ces valeurs s'afficheront alors dans la zone des messages pour chaque requête sans avoir à se rappeler d'activer et de désactiver les statistiques définies.

Vous pouvez également utiliser Shift + Alt + S pour activer les statistiques des clients à tout moment


0

Vous pouvez essayer ce code:

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.