跟踪存储过程的使用

DFo*_*k42 21 sql-server-2008 sql-server statistics

除了使用 SQL Server Profiler 之外,还有什么方法可以跟踪正在使用的存储过程,或者至少是上次执行它们的时间?

Tho*_*ger 19

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

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
Run Code Online (Sandbox Code Playgroud)

这将为您提供usecountsSomeDB.

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

关于计划缓存的 BOL 参考

  • 请记住,这只会告诉您 sp 最近已运行,并且不会为您提供有关不在此处的 proc 的信息。诸如季度报告背后的 proc 之类的东西很少运行,但正在使用。所以基本上,这只是给你一个列表来研究影响你的数据库的应用程序。 (5认同)

Sai*_*a M 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
Run Code Online (Sandbox Code Playgroud)