我们开始在应用程序中获得大量存储过程.其中许多是针对自定义报告的,其中许多报告已不再使用.有没有人知道我们可以在SQL Server 2005中的系统视图上运行的查询,它会告诉我们存储过程的最后执行日期?
Pix*_*ted 46
下面的代码应该做的伎俩(> = 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
Run Code Online (Sandbox Code Playgroud)
编辑1:请注意以下Jeff Modens的建议.
gbn*_*gbn 32
简而言之,没有.
但是,你可以做"好"的事情.
INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()"你可以做一些"有趣"的事情:
RAISERROR ('Warning: pwn3d: call admin', 16, 1),看看谁打电话WAITFOR DELAY '00:01:00',看看谁打电话你明白了.经过实践检验的"看谁调用"IT支持方法.
如果报告是Reporting Services,那么如果可以匹配代码以报告DataSet ,则可以挖掘RS数据库以进行报告运行.
无论如何你都不能依赖DMV,因为它们会在SQL Server重启时重置.查询缓存/锁定是暂时的,不会持续任何时间长度.
Jef*_*den 27
哦,现在小心!所有闪光的不都是金子!所有"统计数据"dm视图和函数都有这类事情的问题.它们只能用于缓存中的内容,缓存中的生命周期可以用几分钟来衡量.如果您要使用这样的东西来确定哪些SP是被删除的候选者,那么当您删除几分钟前使用过的SP时,您可能会受到伤害.
以下摘录来自联机丛书的给定dm视图...
sys.dm_exec_procedure_stats返回高速缓存的存储过程的聚合性能统计信息.视图每个存储过程包含一行,并且只要存储过程保持高速缓存,行的生存期就是这样.从缓存中删除存储过程时,将从此视图中删除相应的行.
sys.dm_exec_query_stats视图在缓存计划中的每个查询语句中包含一行,并且行的生命周期与计划本身相关联.从缓存中删除计划时,将从此视图中删除相应的行.
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
Run Code Online (Sandbox Code Playgroud)
这将为您提供最近执行的过程列表.
如果要检查最近是否执行了特定的存储过程
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
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您在 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85466 次 |
| 最近记录: |