Ale*_*ung 5 sql sql-server ssms
我想找到在我的sql服务器中运行的脚本的执行时间和执行计数。
例如,我在每个执行的脚本上添加了 / * searchThisString * / 。然后我使用下面的代码来找出它们。
SELECT dest.text, deqs.last_execution_time, deqs.execution_count
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE deqs.last_execution_time > '<time>'
AND dest.text LIKE '%<searchThisString>%';
Run Code Online (Sandbox Code Playgroud)
然而,有一种情况该代码失败了。如果脚本仅包含“更新”查询,则上面的代码无法找到它:
例如,
example_script.sql
/*searchThisString*/
update <table> set colA = 'A' where colB = 'B'
Run Code Online (Sandbox Code Playgroud)
那么上面的代码就无法找到这个执行的脚本了。
更新: 我刚刚发现 sys.dm_exec_cached_plans 实际上可以找到所有已执行的脚本。但是,它没有执行脚本的last_execution_time和execution_count信息。
我尝试使用以下代码将其与 sys.dm_exec_query_stats 结合起来(但它也不起作用)。我认为因为 sys.dm_exec_query_stats 没有此执行的查询,所以当我将它们连接起来时,它会为 last_execution_time 返回“null”,并为execution_count 返回“null”。
SELECT dest.text, deqs.last_execution_time, deqs.execution_count
FROM sys.dm_exec_cached_plans AS decp
CROSS APPLY sys.dm_exec_sql_text(decp.plan_handle) AS dest
LEFT JOIN sys.dm_exec_query_stats As deqs
ON decp.plan_handle = deqs.plan_handle
WHERE deqs.last_execution_time > '<time>'
AND dest.text LIKE '%<searchThisString>%';
Run Code Online (Sandbox Code Playgroud)