我获得批处理工作来研究我们的200个存储过程,并找到一些关于它们的不同信息。在SQL Server 2012中是否存在拉存储过程的执行历史记录?无论如何还要告诉应用程序可能正在调用存储过程?即使是IP地址也会有所帮助,因为我们有几台服务器可以进行各种处理。
您可以向我提供的有关此信息的任何信息都非常有用。我在SQL中对这种类型的东西比较新。谢谢!
答案 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