1. 自上次重新处理以来数据集已更改。 2. 数据集未更改超过5分钟。
(第二个条件可防止在更改期间大量重复计算。)
这个方法运行了几周,SP完成重新处理的时间为1-2秒,并且只在需要时执行。然后......
1. 存储过程突然“停止工作”(仅保持运行而不返回)。 2. 我们以微妙的方式更改了存储过程,然后它又可以工作了。 3. 几天后它再次停止工作。 4. 然后有人说:“我们以前见过这种情况,只需重新编译SP。” 5. 在没有更改代码的情况下,我们重新编译了SP,然后它就可以工作了。 6. 几天后它再次停止工作。
这种情况已经重复很多次了。存储过程突然“停止工作”,永远不会返回,客户端超时。(我们尝试通过管理工具运行它,并在15分钟后取消查询。)
但是每次重新编译SP,它都会突然重新工作。
我还没有尝试在适当的EXEC语句上使用WITH RECOMPILE,但是我不想这样做。它每小时被调用数百次,通常什么也不做(它只重新处理数据几次每天)。如果可能,我希望避免重新编译相对复杂的SP的开销,以“避免不应该发生的事情......”
有人以前经历过这种情况吗?有人有任何克服它的建议吗?
编辑:
伪代码如下:
1. 从table_x读取"a" 2. 从table_x读取"b" 3. 如果(a选择不太好看,但是在内联执行时,它们立即执行。包括当SP拒绝完成时。分析器显示它是SP“停滞”的插入操作。
SP没有参数,并且sp_lock未显示任何阻止进程的内容。