如何在SQL中快速获取存储过程的last_elapsed_time

时间:2019-07-11 13:07:26

标签: sql sql-server performance cross-apply

我正在尝试使用一些SQL数据来记录API。

我想获取last_elapsed_time(存储过程运行所花费的时间)。

我可以通过交叉应用来获得此数据,但是它非常慢,大约15秒。

要大大减少这次的记录,

select 
    'text' = st.text,
    'last_exec_time' = qs.last_execution_time,
    'last_elapsed_time' = qs.last_elapsed_time
from 
    sys.dm_exec_query_stats as qs
cross apply 
    sys.dm_exec_sql_text(qs.sql_handle) as st
where 
    st.text like '%name_of_stored_procedure%'

是否有更快的方法来获取特定存储过程的last_elapsed_time

1 个答案:

答案 0 :(得分:0)

您可以尝试使用计划句柄而不是sql句柄:

SELECT 
    'text' = dest.text,
    'last_exec_time' = qs.last_execution_time, 
    'last_elapsed_time' = qs.last_elapsed_time
FROM sys.dm_exec_cached_plans decp
CROSS APPLY sys.dm_exec_sql_text(decp.plan_handle) AS dest
INNER JOIN sys.dm_exec_query_stats qs on qs.plan_handle = decp.plan_handle
WHERE dest.objectid = OBJECT_ID('<your procedure name>')