如何从SQL Server 2008中的DMV获取过程调用?

时间:2012-10-11 07:14:50

标签: sql-server-2008 sql-server-2008-r2

我正在使用SQL Server 2008,我们需要使用DMV捕获s过程调用并将其存储在表中以进行跟踪。是否可以获取存储过程调用?

2 个答案:

答案 0 :(得分:2)

您在寻找sys.dm_exec_procedure_stats吗? (MSDN Link

  

返回缓存存储过程的聚合性能统计信息。   视图为每个缓存的存储过程计划返回一行,并且   只要存储过程仍然存在,行的生命周期   缓存。从缓存中删除存储过程时,   从该视图中删除相应的行。那个时候,一个   性能统计信息SQL跟踪事件的引发类似于   sys.dm_exec_query_stats动态管理。

您应该能够从审计表中选择所需的任何存储过程执行统计信息。如果您希望扩展审计以包括不一定存储过程的即席查询,请考虑改为sys.dm_exec_query_stats

答案 1 :(得分:2)

也许不完全是你想要的,但它可能是开始。如果您正在查找已运行的查询,无论是否存储过程,您可能需要查看此

select  case
          when r.statement_end_offset = -1 then 
            substring(s.text, (r.statement_start_offset / 2), len(s.text))
          else 
            substring(s.text, (r.statement_start_offset / 2), (r.statement_end_offset /     2) - (r.statement_start_offset / 2))
        end as statement_text
      , q.query_plan
      , r.cpu_time
      , r.reads as request_reads
      , r.writes as request_writes
      , r.logical_reads as request_logical_reads
from    sys.dm_exec_requests r
        cross apply sys.dm_exec_sql_text(r.sql_handle) s
        cross apply sys.dm_exec_query_plan(r.plan_handle) q

它为您提供已运行的所有查询。