Sql server SQL Server中存储过程的上次运行日期
我们开始在应用程序中获得大量存储过程。其中许多用于自定义报告,其中许多已不再使用。有人知道我们可以在SQL Server 2005的系统视图上运行一个查询,告诉我们存储过程的最后执行日期吗?简单地说,没有 然而,你可以做一些“好”的事情Sql server SQL Server中存储过程的上次运行日期,sql-server,Sql Server,我们开始在应用程序中获得大量存储过程。其中许多用于自定义报告,其中许多已不再使用。有人知道我们可以在SQL Server 2005的系统视图上运行一个查询,告诉我们存储过程的最后执行日期吗?简单地说,没有 然而,你可以做一些“好”的事情 使用存储的进程名运行探查器跟踪 在每个过程中添加一行(当然,创建一个选项卡) 插入dbo.SPCall(What,When)值(对象名称(@@PROCID),GETDATE()) 也延长2的持续时间 你可以做一些“有趣”的事情: 把它拿走,看看是谁打电话来
)插入dbo.SPCall(What,When)值(对象名称(@@PROCID),GETDATE()
RAISERROR('Warning:pwn3d:call admin',16,1)
,查看谁呼叫等待延迟'00:01:00'
,查看谁呼叫查询缓存/锁是暂时的,不会持续任何时间。下面的代码应该可以做到这一点(>=2008)
编辑1:请注意Jeff Modens下面的建议。如果你在这里找到一个过程,你可以确保它是准确的。如果你不知道,那么你就不知道-你不能断定它没有运行。哦,现在小心点!闪光的东西不是金子!所有的“统计数据”dm视图和函数在这类问题上存在问题。它们只对缓存中的内容起作用,缓存中的内容的生存期可以用分钟来衡量。如果要使用这样的内容来确定哪些SP是要删除的候选SP,那么当您删除几分钟前使用的SP时,您可能会受到伤害。 以下摘录摘自给定dm视图的联机丛书 sys.dm_exec_procedure_stats 返回缓存存储过程的聚合性能统计信息。视图中每个存储过程包含一行,该行的生存期与存储过程保持缓存的时间相同。从缓存中删除存储过程时,相应的行将从此视图中删除 sys.dm_exec_query_stats 视图在缓存的计划中每个查询语句包含一行,行的生存期与计划本身相关联。从缓存中删除计划时,相应的行将从此视图中删除。这在2005年正常工作(如果计划在缓存中) 我用这个:
使用YourDB;
挑选
对象名称(对象id),
最后一次执行,
上次,
执行次数
从…起
sys.dm_exec_procedure_stats ps
哪里
较低的(对象名称(对象id))如“Appl name%”
按1订购
sys.dm_exec_procedure_stats包含有关执行函数、约束和过程等的信息。但行的生命周期有限制,从缓存中删除执行计划时,条目将消失
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
如果在SQL Server 2016或更新版本上启用查询存储,则可以使用以下查询获取上次SP执行。历史记录取决于查询存储配置
SELECT
ObjectName = '[' + s.name + '].[' + o.Name + ']'
, LastModificationDate = MAX(o.modify_date)
, LastExecutionTime = MAX(q.last_execution_time)
FROM sys.query_store_query q
INNER JOIN sys.objects o
ON q.object_id = o.object_id
INNER JOIN sys.schemas s
ON o.schema_id = s.schema_id
WHERE o.type IN ('P')
GROUP BY o.name , + s.name
我们有调用它们的所有存储过程日志。我们所有的存储过程都有一个会话ID参数,该参数包含在日志中(以及引发的任何错误和持续时间)。我们一直都很满意(到目前为止!)这是一个非常有用的脚本,谢谢,一个小的更正,在第二行你错过了一个“e”,它应该是
a.last_execution\u time
,谢谢和+1。非常有用的DMV。我们还能得到程序提供的输入参数吗?很好。我想是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
SELECT
ObjectName = '[' + s.name + '].[' + o.Name + ']'
, LastModificationDate = MAX(o.modify_date)
, LastExecutionTime = MAX(q.last_execution_time)
FROM sys.query_store_query q
INNER JOIN sys.objects o
ON q.object_id = o.object_id
INNER JOIN sys.schemas s
ON o.schema_id = s.schema_id
WHERE o.type IN ('P')
GROUP BY o.name , + s.name