存储过程历史记录和应用程序调用它?

时间:2016-05-19 15:49:09

标签: stored-procedures sql-server-2012

我获得批处理工作来研究我们的200个存储过程,并找到一些关于它们的不同信息。在SQL Server 2012中是否存在拉存储过程的执行历史记录?无论如何还要告诉应用程序可能正在调用存储过程?即使是IP地址也会有所帮助,因为我们有几台服务器可以进行各种处理。

您可以向我提供的有关此信息的任何信息都非常有用。我在SQL中对这种类型的东西比较新。谢谢!

1 个答案:

答案 0 :(得分:1)

  

在SQL Server 2012中是否存在拉存储过程的执行历史记录?

您可以使用 sys.dm_exec_procedure_stats 查找存储过程执行时间以及最耗时的CPU密集型

SELECT TOP 10 
    d.object_id, d.database_id, 
    OBJECT_NAME(object_id, database_id) 'proc name', 
    d.cached_time, d.last_execution_time, d.total_elapsed_time,
    d.total_elapsed_time/d.execution_count AS [avg_elapsed_time],
    d.last_elapsed_time, d.execution_count
FROM
    sys.dm_exec_procedure_stats AS d
ORDER BY
    [total_worker_time] DESC;
  

还有什么可以告诉应用程序可能正在调用存储过程?即使是IP地址也会有所帮助,因为我们有几台服务器可以进行各种处理。

上述问题的答案是 NO ,除非您使用以下查询实时监控它们。您可以按照预定义的时间间隔使用SQL Server代理运行以下查询,并在表中捕获输出。请注意,这会在存储过程中为您提供单独的语句。

select
    r.session_id,
    s.login_name,
    c.client_net_address,
    s.host_name,
    s.program_name,
    st.text
from 
    sys.dm_exec_requests r
inner join 
    sys.dm_exec_sessions s on r.session_id = s.session_id
left join 
    sys.dm_exec_connections c on r.session_id = c.session_id
outer apply 
    sys.dm_exec_sql_text(r.sql_handle) st