【问题标题】:How to quickly get last_elapsed_time for a stored procedure in SQL如何快速获取 SQL 中存储过程的 last_elapsed_time
【发布时间】:2019-07-11 13:07:26
【问题描述】:

我正在尝试使用一些 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

【问题讨论】:

    标签: sql sql-server performance cross-apply


    【解决方案1】:

    您可以尝试使用计划句柄而不是 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>')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2010-10-22
      • 2015-06-23
      • 2010-10-07
      相关资源
      最近更新 更多