跟踪存储过程的使用


19

除了使用SQL Server Profiler,是否还有其他方法可以跟踪正在使用哪些存储过程,或者至少何时跟踪它们的执行时间?


4
您可以随时查看计划缓存。SQL Server不会永远跟踪这些东西,因为元数据会很快变得庞大而昂贵。
2012年

Answers:


17

您可以查看计划缓存,以很好地了解存储过程的用法。以这个查询为例:

select
    db_name(st.dbid) as database_name,
    object_name(st.objectid) as name,
    p.size_in_bytes / 1024 as size_in_kb,
    p.usecounts,
    st.text
from sys.dm_exec_cached_plans p
cross apply sys.dm_exec_sql_text(p.plan_handle) st
where p.objtype = 'proc'
and st.dbid = db_id('SomeDatabase')
order by p.usecounts desc

这将为您提供usecounts与相关的已缓存存储过程SomeDB

注意:计划缓存包含执行计划。这些计划的保留涉及许多因素。 尽管这将使您对正在使用的内容以及使用的频率有一个很好的了解,但是绝对不是存储过程的运行总数以及它们执行的频率/时间。

有关计划缓存的BOL参考


4
记住,这仅告诉您sp已在最近运行,并且未提供有关不在此处的proc的信息。季度报告后面的proc之类的事件很少运行,但一直在使用。因此,基本上,这只是为您提供了一个列表,供您研究影响数据库的应用程序。
HLGEM 2012年

1
@HLGEM准确。我试图在我的回答中阐明这一点。
Thomas Stringer

是否可以针对特定的日期时间范围执行此操作?(例如,最后一天/月等)?
Jose Parra

请注意,此查询不会为已更改且之后未执行的存储过程返回一行。
Axel2D

10

您可以查看它以及它包含last_execution_time每个存储过程的信息。

    SELECT DB_NAME(database_id)
    ,OBJECT_NAME(object_id,database_id)
    ,cached_time
    ,last_execution_time
    ,execution_count
FROM sys.dm_exec_procedure_stats

有关于这一点的警告。这些统计信息仅自上次数据库执行以来保留。我正忙着写一份工作,每天将其存档到一张表中。
Earthling42 '18 -5-28

@ earthling42,您是否曾经写过一份每天将其存档到表中的作业?
Chun颂忠

@Alex Chung-不幸的是从来没有解决过这个问题。在发布这篇文章之后不久,便移至非MS-SQL项目。不应该努力吗?如果您有兴趣,我很乐意与您合作。
Earthling42
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.