我有一份可以从sys.dm_exec_procedure_stats中捕获数据的工作。 作业每分钟运行一次。它是从无连接的直接插入。 我遇到的情况是,一个特定的对象ID经常(每个星期两天都一样,没有失败)返回类似以下的内容
timeOfCapture /LastExecutionTime
16:58 / 16:30
16:59 / 16:30
17:00 / 16:30
17:01 / 17:00 (no explanation)
17:02 / 16:30 (no explanation - back to normal)
17:03 / 16:30
存储过程由大约16:30开始的作业调用 据我所知,该存储过程未在17:00运行。 有一个工作从17:00开始,但不执行此存储过程。 存储过程大约需要30秒才能完成。
所有对象的ID都相同,数据库ID也相同。
这种定期发生而没有失败的事实意味着也许还有另一个过程
我不知道是否有重启之类的事情 我也不确定是否有可能调用存储过程的外部进程(其他服务器/ excel / etc),或者可能存在回滚。
这可能是个红鲱鱼,我忽略了一些,但是我检查了所有我能想到的。 关于那些LastExecutionTimes有什么想法吗?
谢谢
答案 0 :(得分:0)
该DMV为每个已缓存存储过程计划包含一行,并且该行的生存期只要存储过程保持高速缓存即可。这意味着该存储过程在此表中可以具有多个行,如果它们在缓存中没有计划,则根本不行。 last_execution_time
对应于该行的查询计划最后一次执行该过程的时间。因此,根据您的情况,该过程可能在前一天的1630(因为您没有显示日期)之后在当天的1700处执行,反之亦然。考虑到您的方案的可重复性,您当前的工作很可能使用一个计划,而另一项工作(甚至在另一天)正在使用另一个计划。目前尚不清楚您如何选择要插入的行...可能是TOP 1
而没有ORDER BY
。这可能会导致此行为。我们需要查看正在执行 logging
请注意,有很多事情可能导致计划从缓存中删除或创建新计划。在具有固定参数的Job中,后者的可能性较小。
如果您确实要跟踪过程的执行(不仅是缓存计划的最后一次执行),则需要设置日志记录机制。 Aaron has a good article on it her e。