valor salida que procedimientos procedimiento parametros fecha error ejemplo ejecutar devuelven desde declarar con almacenados almacenado sql-server

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.

  1. Ejecute una traza del perfilador con, por ejemplo, el nombre de proc almacenado
  2. Agregue una línea a cada proc (cree una tabla por supuesto)
    • " INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE() "
  3. Extiende 2 con duración también

Hay cosas "divertidas" que puedes hacer:

  1. Eliminarlo, ver quién llama
  2. Eliminar derechos, ver quién llama
  3. Agregue RAISERROR (''Warning: pwn3d: call admin'', 16, 1) , vea quién llama
  4. 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