Как быстро получить last_elapsed_time для хранимой процедуры в SQL - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь создать журнал для API с некоторыми данными SQL.

Я хотел бы получить 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 голосов
/ 11 июля 2019

Вы можете попробовать использовать дескриптор плана вместо дескриптора 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>')
...