存储过程的许多查询计划

时间:2019-03-11 08:22:58

标签: sql sql-server tsql parameter-sniffing sp-blitz

我建立了一个存储过程,该过程可以找到拥有许多仓库的公司中最短的路线。该过程被系统大量使用。经过许多优化(包括内存优化表)后,如果我运行sp_BlitzCache,则会收到2条警告:

  1. 参数嗅探;
  2. 您的缓存中总共有83866个计划,其中过去24小时创建了100.00%计划,过去4小时创建了100.00%,过去1小时创建了100.00%。

仅使用参数(无硬编码值)调用该过程。您可以在这里找到查询计划:https://www.brentozar.com/pastetheplan/?id=r1rW59QvN

我真的不明白为什么引擎会为每次执行生成一个计划以及我应该检查什么。另外,sp_BlitzCache说我们找不到该查询的计划。可能的原因包括动态SQL,RECOMPILE提示和加密的代码。我既没有动态SQL,也没有重新编译的提示,也没有加密的代码。

我应该检查什么?

更新

我按照Jeroen Mostert在评论中建议的那样检查了此过程对服务器的影响(感谢您的答复!),此过程使用了服务器上有关平均IO的前10个过程中的0.66%,但这是唯一的过程没有计划,那么问题仍然存在:为什么会有那么多计划?

没有内存优化表,我没有尝试运行存储过程。我必须使用它们,因为proc需要像闪电一样快地运行(在某些情况下,运行时间不到30毫秒)。另外,如果没有优化表内存,就没有胆量了,因为我无法在测试服务器上重现工作量。

谢谢!

0 个答案:

没有答案