SQL Server Management Studio, cómo reducir el tiempo de ejecución a milisegundos

220

Cuando envío un lote (por ejemplo, realizar una consulta) en SSMS, veo el tiempo que tardó en ejecutarse en la barra de estado. ¿Es posible configurar SSMS para mostrar el tiempo de consulta con una resolución de milisegundos?

Aquí está la barra de la que estoy hablando con la sección de interés encerrada en rojo:

ingrese la descripción de la imagen aquí

Michael Goldshteyn
fuente
3
Realmente no responde a su pregunta, pero puede usar SQL Server Profiler (una herramienta de registro) para verificar la duración de su consulta. La duración se mide en milisegundos.
AGuyCalledGerald

Respuestas:

66

Estaba luchando con eso hasta que encontré esto ...

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

Además, si abre la ventana Propiedades, puede encontrar algún "Tiempo transcurrido de conexión" mágico que puede darle algo de tiempo de ejecución ... Espero que ayude ...

Ymagine Primero
fuente
18
La parte relativa a la ventana Propiedades es realmente la respuesta a este hilo. "Tiempo transcurrido" está sentado allí mirándote a la cara.
Eric
Y ahora estoy estableciendo esta respuesta como la respuesta aceptada, ya que es la más correcta.
Michael Goldshteyn
363

Lo que quieres hacer es esto:

set statistics time on

-- your query

set statistics time off

Eso hará que la salida se vea más o menos así en la ventana de Mensajes:

Tiempos de ejecución de SQL Server: tiempo de CPU = 6 ms, tiempo transcurrido = 6 ms.


fuente
1
Pero esto pone el tiempo en la ventana Mensajes, lo que significa que tengo que voltear manualmente después de realizar la consulta. Además, los resultados parecen no tener sentido, por ejemplo: tiempo de CPU = 1357 ms, tiempo transcurrido = 169 ms. ¿Cómo se suma eso, incluso si tengo 8 núcleos con hyperthreading (es decir, 16 virtuales)?
Michael Goldshteyn el
2
@MichaelGoldshteyn en cuanto a por qué su tiempo de CPU es mayor, es porque tiene una CPU multi-core o hyperthreaded.
25
@MichaelGoldshteyn 1357/8 = 169.625. ¿Coincidencia?
Dan J
3
@DanJ, ​​el DB no hace todo de memoria. A menudo, I / O está involucrado y I / O significa más tiempo transcurrido.
Michael Goldshteyn
99
@binki Tienes razón de que mi comentario de 1.555 días era inexacto.
benizi
125

Active las Estadísticas del cliente realizando una de las siguientes acciones:

  • Menú: Consulta> Incluir estadísticas del cliente
  • Barra de herramientas: haga clic en el botón (junto a Incluir tiempo de ejecución real)
  • Teclado: Shift-Alt-S

Luego obtienes una nueva pestaña que registra los tiempos, los datos de E / S y los recuentos de filas, etc. para (hasta) las últimas 10 ejecuciones (¡más promedios!):

ingrese la descripción de la imagen aquí

NickG
fuente
Es lo mismo que la respuesta de @Ymagine First de noviembre de 2012. Vea la respuesta anterior ...
Bogdan Bogdanov
Ese sitio (irónicamente) tenía un error de SQL en ese momento, por lo que extraje la información clave de un caché de Google y lo publiqué como una nueva respuesta. No tenía la intención de robar crédito y quizás debería haber editado la respuesta original en su lugar.
NickG
En realidad, parece que no tengo suficientes puntos de representación para editar preguntas, por lo que probablemente es por eso que no hice eso.
NickG
3
Para su información, las unidades para las estadísticas de tiempo están en milisegundos: brentozar.com/archive/2012/12/…
congusbongus
17

Para obtener el tiempo de ejecución como una variable en su proceso:

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] 

Y ver esto

Medición del rendimiento de la consulta: "Costo de la consulta del plan de ejecución" frente a "Tiempo empleado"

atik sarker
fuente
1
Datepart NS representa nanosegundos, para milisegundos use MS
Milan Matějka
12

Estaba buscando lo mismo y me topé con el siguiente enlace que fue brillante:

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

Muestra tres formas diferentes de medir el rendimiento. Todo bien por sus propias fortalezas. El que opté por fue el siguiente:


DECLARE @ Time1 DATETIME

DECLARE @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Insertar consulta aquí

SET @ Time2 = GETDATE ()

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


Esto mostrará los resultados de su consulta seguidos de la cantidad de tiempo que tardó en completarse.

Espero que esto ayude.

J-Man
fuente
Me pareció inconstante, a veces muestra el tiempo y a veces solo muestra 0.
RMati
2

No sé sobre expandir la barra de información.

Pero puede establecer los tiempos predeterminados para todas las consultas que se muestran en la pestaña "Mensajes".

Cuando se encuentre en una ventana de consulta, vaya al elemento del menú Consulta, seleccione "opciones de consulta", luego seleccione "avanzado" en el grupo "Ejecución" y marque las casillas de verificación "establecer estadísticas de tiempo" / "establecer estadísticas de E / S". Estos valores aparecerán en el área de mensajes para cada consulta sin tener que acordarse de activar y desactivar las estadísticas establecidas.

También puede usar Shift + Alt + S para habilitar las estadísticas del cliente en cualquier momento

luke
fuente
0

Puedes probar este código:

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
fuente