sql-server - salida - procedimientos almacenados sql
Fecha de última ejecución en un procedimiento almacenado en SQL Server (6)
El siguiente código debería 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: tome nota de los consejos de Jeff Modens a continuación.
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?
En pocas palabras, no.
Sin embargo, hay cosas "agradables" que puedes hacer.
- Ejecute una traza del perfilador con, por ejemplo, el nombre de proc almacenado
- Agregue una línea a cada proc (cree una tabla por supuesto)
- "
INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()
"
- "
- Extiende 2 con duración también
Hay cosas "divertidas" que puedes hacer:
- Eliminarlo, ver quién llama
- Eliminar derechos, ver quién llama
- Agregue
RAISERROR (''Warning: pwn3d: call admin'', 16, 1)
, vea quién llama - Agregue
WAITFOR DELAY ''00:01:00''
, vea quién llama
Entiendes la idea. El probado método de "ver quién llama" de TI.
Si los informes son Reporting Services, puede extraer la base de datos de RS para ejecutar el informe si puede comparar el código para informar al DataSet.
No puede confiar en los DMV de todos modos porque se reinician en el reinicio de SQL Server. Los bloqueos / bloqueos de consulta son transitorios y no persisten durante un período de tiempo prolongado.
Esto funciona bien en 2005 (si el plan está en el 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'')
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 Books Online para las vistas dm dadas ...
sys.dm_exec_procedure_stats Devuelve estadísticas de rendimiento agregado para los 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 almacenado 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.
Yo uso esto:
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
sys.dm_exec_procedure_stats contiene la información sobre las funciones de ejecución, restricciones 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 recientemente ejecutados.
Si desea verificar si un procedimiento almacenado perticular se ejecutó 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