2011-10-14 20 views
19

Tengo 10 procedimientos almacenados de la siguiente manera: SP1, SP2, ....., SP10 Estos procedimientos almacenados hacen algunas cosas. Necesito ejecutar estos procedimientos de la siguiente manera: EJECUTAR SP1; EJECUTAR SP2; ... EJECUTAR SP10;¿Cómo encontrar el tiempo de ejecución de procedimientos almacenados en SQL Server?

Cuando finaliza el servidor SQL para completar la ejecución de estos procedimientos, ofrece diez líneas que muestran los cambios de fila provocados por todos estos procedimientos almacenados. Lo que quiero hacer es que después de la ejecución de todos los procedimientos almacenados SQL Server también proporcione en la ventana de salida el tiempo de ejecución para cada procedimiento almacenado. ¿Puedo hacer esto? Estoy seguro de que para lograr esta tarea necesito modificar los procedimientos almacenados, pero no tengo ni idea de cómo hacerlo ... Por favor, ayúdenme. Gracias.

+1

¿Estás llamando al procedimiento almacenado desde su aplicación escrita personalizada? Si es así, ¿qué idioma? – Koekiebox

Respuesta

13

Puede usar Sql Server Profiler para este propósito, proporciona mucha información útil a lo largo de cada uno ejecutado consulta y procedimiento almacenado también.

MSDN: SQL Profiler Data Columns

de SQL muestra el tiempo de ejecución para cada evento

Otra manera sencilla:

  1. DECLARE 2 variables de fecha y hora: inicio/final
  2. inicio SET = GETDATE()
  3. EXEC sp_name
  4. final SET = GETDATE() Tiempo de Ejecución
  5. - diferencia entre inicio y final
0

capture and display execution time

uso de dos parámetros de datetime tipo y establecer una usando getdate() antes del inicio de tsql en procedimiento almacenado

y establecer segundo utilizando getdate() después tsql y finalmente utilizar datediff función para obtener la diferencia

20

Suponiendo estudio de gestión o algún otro entorno con un panel de salida que puedas;

SET STATISTICS TIME ON 
EXEC SP1 
EXEC SP2 
... 
SET STATISTICS TIME OFF 
3

Hay maneras de hacer esto utilizando herramientas como generador de perfiles de SQL Server, pero de una manera sencilla es ejecutar cada proc rodeada por una línea para imprimir el tiempo:

print convert(varchar, getdate(), 21) 
EXEC PROC SP1 
print convert(varchar, getdate(), 21) 
+0

¿por qué convertir a varchar? Básicamente lo que debe hacer es tomar la diferencia de milisegundos antes y después de ejecutar el procedimiento –

+0

Simplemente para que pueda obtener una salida formateada como '2011-10-14 12: 32: 39.403'.Dejarlo como fecha no necesariamente le dará los milisegundos, e informando _sólo_ la diferencia pierde los datos adicionales de ** cuando ** se ejecutó, en caso de que no esté supervisado. – Widor

+0

gracias ... casi todos los métodos funcionaron !!! – Azeem

4
declare @start datetime = getdate() 

-- your SQL statements 
exec dbo.MyStoredProcedure 

declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate()) 
Cuestiones relacionadas