Estamos empezando a obtener una gran cantidad de procedimientos almacenados en nuestra aplicación. Muchos de ellos son para informes personalizados, muchos de los cuales ya no se utilizan. ¿Alguien sabe de una consulta que podríamos ejecutar en las vistas del sistema en SQL Server 2005 que nos diga la última fecha en que se ejecutó un procedimiento almacenado?Fecha de última ejecución en un procedimiento almacenado en SQL Server
Respuesta
En pocas palabras, no.
Sin embargo, hay cosas "agradables" que puede hacer.
- Ejecutar una traza con, por ejemplo, el nombre de procedimiento almacenado
- añadir una línea cada proc (crear un tabel por supuesto)
- "
INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()
"
- "
- Extend 2 con duración también
Hay cosas "divertidas" que puede hacer:
- eliminarlo, ver quién llama
- eliminar los derechos, a ver quién llama
- Añadir
RAISERROR ('Warning: pwn3d: call admin', 16, 1)
, ver quién llama - Añadir
WAITFOR DELAY '00:01:00'
, ver quién llama
Usted consigue la idea. El probado método de "ver quién llama" de TI.
Si los informes son Reporting Services, puede mine the RS database ejecutar el informe si puede hacer coincidir el código para informar DataSet.
No puede confiar en los DMV de todos modos porque se reinician desde el reinicio del SQL Server. Los bloqueos/bloqueos de consulta son transitorios y no persisten durante un período de tiempo prolongado.
El siguiente código debe hacer el truco (> = 2008)
SELECT o.name,
ps.last_execution_time
FROM sys.dm_exec_procedure_stats ps
INNER JOIN
sys.objects o
ON ps.object_id = o.object_id
WHERE DB_NAME(ps.database_id) = ''
ORDER BY
ps.last_execution_time DESC
Edición 1: Por favor, tome nota de consejos Jeff Modens a continuación.
funciona solo en SQL 2008 y más – Kodak
+1 un guión muy útil, gracias, una pequeña corrección, en la segunda línea que faltó una 'e', debería ser 'a.last_execution_time', – AmmarR
Gracias y +1 por esto. DMV muy útil. ¿podemos obtener los parámetros de entrada provistos del procedimiento también de todos modos? –
¡Oh, ten cuidado ahora! ¡Todo lo que brilla no es oro! Todas las vistas y funciones de dm "stats" tienen un problema para este tipo de cosas. Solo funcionan contra lo que está en caché y la vida útil de lo que está en caché se puede medir en minutos. Si tuviera que usar tal cosa para determinar qué SP son candidatos para ser descartados, podría estar en un mundo de dolor cuando elimine los SP que se utilizaron hace unos minutos.
Los siguientes extractos son de los libros en línea de las opiniones dadas dm ...
sys.dm_exec_procedure_stats devuelve las estadísticas de rendimiento agregados para procedimientos almacenados en caché. La vista contiene una fila por procedimiento almacenado, y la duración de la fila es tan larga como el procedimiento almacenado permanece en la memoria caché. Cuando se elimina un procedimiento almacenado de la memoria caché, la fila correspondiente se elimina de esta vista.
sys.dm_exec_query_stats La vista contiene una fila por instrucción de consulta dentro del plan en caché, y la duración de las filas está vinculada al plan en sí. Cuando se elimina un plan de la memoria caché, las filas correspondientes se eliminan de esta vista.
Entonces, ¿sería justo decir que si hay una entrada presente en la consulta ofrecida por @Pixelated, entonces el último tiempo de ejecución es correcto, pero si falta una entrada, entonces no puede hacer suposiciones sobre su último tiempo de ejecución? –
Mis disculpas por la respuesta extremadamente tardía. No he estado aquí mucho últimamente. Lo que declaraste arriba es correcto. –
Esto funciona bien en 2005 (si el plan está en la caché)
USE YourDb;
SELECT qt.[text] AS [SP Name],
qs.last_execution_time,
qs.execution_count AS [Execution Count]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.dbid = DB_ID()
AND objectid = OBJECT_ID('YourProc')
Yo uso este:
use YourDB;
SELECT
object_name(object_id),
last_execution_time,
last_elapsed_time,
execution_count
FROM
sys.dm_exec_procedure_stats ps
where
lower(object_name(object_id)) like 'Appl-Name%'
order by 1
formato correctamente – HaveNoDisplayName
sys.dm_exec_procedure_stats contiene la información sobre las funciones de ejecución, las limitaciones y Procedimientos, etc. Pero el tiempo de vida de la fila tiene un límite. En el momento en que se elimina el plan de ejecución de la memoria caché, la entrada desaparecerá.
Use [yourDatabaseName]
GO
SELECT
SCHEMA_NAME(sysobject.schema_id),
OBJECT_NAME(stats.object_id),
stats.last_execution_time
FROM
sys.dm_exec_procedure_stats stats
INNER JOIN sys.objects sysobject ON sysobject.object_id = stats.object_id
WHERE
sysobject.type = 'P'
ORDER BY
stats.last_execution_time DESC
Esto le dará la lista de los procedimientos ejecutados recientemente.
Si desea comprobar si un procedimiento almacenado perticular ejecutado recientemente
SELECT
SCHEMA_NAME(sysobject.schema_id),
OBJECT_NAME(stats.object_id),
stats.last_execution_time
FROM
sys.dm_exec_procedure_stats stats
INNER JOIN sys.objects sysobject ON sysobject.object_id = stats.object_id
WHERE
sysobject.type = 'P'
and (sysobject.object_id = object_id('schemaname.procedurename')
OR sysobject.name = 'procedurename')
ORDER BY
stats.last_execution_time DESC
- 1. La última vez que se ejecutó un procedimiento almacenado
- 2. ¿Cómo puedo encontrar la última fecha de modificación, usuario modificado de un procedimiento almacenado en SQL Server 2008
- 3. Cambiar el nombre de un procedimiento almacenado en SQL Server
- 4. Cómo crear un procedimiento almacenado dentro de otro procedimiento almacenado en SQL Server 2008
- 5. SQL Server: transacción de procedimiento almacenado
- 6. Ejecución programada del procedimiento almacenado en el servidor SQL
- 7. ¿Cómo guardo un procedimiento almacenado en SQL Server 2008 R2?
- 8. SQL Server: variable opcional en un procedimiento almacenado
- 9. ¿Cómo creo condicionalmente un procedimiento almacenado en SQL Server?
- 10. Microsoft SQL Server - ¿Quién creó un Procedimiento almacenado?
- 11. SQL Server - SELECT FROM procedimiento almacenado
- 12. SQL Server procedimiento almacenado guía para principiantes
- 13. Parámetros de salida de procedimiento almacenado en SQL Server Profiler
- 14. Otorgar privilegio de ejecución al procedimiento almacenado en SQL Azure
- 15. Valor de retorno en el procedimiento almacenado de SQL Server
- 16. Averigüe el procedimiento almacenado de llamada en SQL Server
- 17. Valor devuelto en el procedimiento almacenado de SQL Server
- 18. Procedimiento almacenado de depuración en SQL Server 2008
- 19. SQL Server 2000: ¿cómo salir de un procedimiento almacenado?
- 20. Ejecución del procedimiento almacenado sincronizado en mysql
- 21. Ejecutar el paquete SSIS de SQL Server del procedimiento almacenado
- 22. Cómo descifrar el procedimiento almacenado en SQL Server 2008
- 23. Dónde encontrar el procedimiento almacenado msdb.dbo.sp_send_dbmail en SQL Server
- 24. ¿Cómo detener la ejecución de un procedimiento almacenado utilizando SQL Server?
- 25. SQL Server Agent Trabajo en ejecución lenta
- 26. Consultas actualmente en ejecución en SQL Server
- 27. ¿La ejecución del procedimiento almacenado de T-SQL es "atómica"?
- 28. MS SQL Server 2005 - Procedimiento almacenado "Interrupciones espontáneas"
- 29. Linq: ejecución de interrupción del procedimiento almacenado
- 30. SQL Server 2008 procedimiento almacenado con múltiples parámetros de salida
Esta es una gran pregunta. – NotMe
Tenemos todos nuestros registros de Sprocs que fueron llamados. Todos nuestros Sprocs tienen un parámetro para la ID de sesión, y eso está incluido en el registro (junto con cualquier error planteado y duración). Nos hemos sentido cómodos (¡hasta ahora!) Con los gastos generales, y ha ayudado con los informes de depuración/administración a menudo – Kristen