SQL Server中存储过程的上次运行date

我们开始在我们的应用程序中获得大量的存储过程。 其中许多是用于定制报告,其中许多不再使用。 有谁知道一个查询,我们可以在SQL Server 2005中的系统视图上运行,这将告诉我们存储过程执行的最后一个date?

简而言之,不。

然而,你可以做的事情是“好的”。

  1. 使用存储的proc名称运行分析器跟踪
  2. 每个proc添加一行(当然创build一个tabel)
    • INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()
  3. 延长2也持续时间

你可以做些有趣的事情:

  1. 删除它,看谁打来的
  2. 删除权利,看谁打来的
  3. 添加RAISERROR ('Warning: pwn3d: call admin', 16, 1) ,看谁打来的
  4. 添加WAITFOR DELAY '00:01:00' ,看谁打来的

你明白了。 经过validation的“看谁来”的IT支持方式。

如果报告是Reporting Services,那么如果可以将代码与DataSet进行报告相匹配,则可以挖掘RS数据库以进行报告运行。

无论如何,您不能依赖DMV,因为它们是在重新启动SQL Server的情况下重置的。 查询caching/locking是暂时的,不会持续任何时间长度。

下面的代码应该做的(> = 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 

编辑1:请注意下面的Jeff Modensbuild议。

哦,现在要小心了! 所有闪光的不都是金子! 所有的“统计”DM视图和函数都有这种types的事情的问题。 它们只能处理caching中的内容,并且可以在几分钟内测量caching中的内容。 如果你要用这样的东西来确定哪些SP可能被放弃,那么当你删除几分钟前使用的SP时,你可能会受到伤害。

下面的摘录是从联机丛书给出的DM视图…

sys.dm_exec_procedure_stats返回caching存储过程的聚合性能统计信息。 该视图每个存储过程包含一行,只要该存储过程保持高速caching,该行的生存期就会一直存在。 从caching中删除存储过程时,相应的行将从此视图中消除。

sys.dm_exec_query_stats视图在caching计划内的每个查询语句中包含一行,并且行的生命周期与计划本身相关联。 从caching中删除计划时,将从该视图中删除相应的行。

sys.dm_exec_procedure_stats包含有关执行函数,约束和过程等的信息,但是这个行的生存时间是有限制的。从caching中移除执行计划的那一刻,这个入口就会消失。

 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 

这会给你最近执行的程序清单。

如果你想检查最近执行的一个特定的存储过程

 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 

这在2005年正常工作(如果计划在caching中)

 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') 

我用这个

使用YourDB;

 SELECT object_name(object_id),last_execution_time,last_elapsed_time,execution_count
 FROM sys.dm_exec_procedure_stats ps 
其中lower(object_name(object_id))如'Appl-Name%'
按1sorting