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

Michael Goldshteyn
la source
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 ...

Ymagine First
la source
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.


la source
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

NickG
la source
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»

atik sarker
la source
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-Man
la source
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

luke
la source
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
Rohitkumar
la source