我有2个服务器安装了SQL服务器,并且完全相同的数据库。数据库有一个存储过程,在服务器A上需要35分钟,但在服务器B表上需要9个小时。该程序主要更新几个表格,但数据完全相同,所以我不明白为什么时差如此巨大
有人可以告诉我一个虚拟查询,我可以在两台服务器上运行(与当前数据无关)来比较性能。例如插入500万行,然后全部更新。
仅供参考,服务器B规格是更高的规格,相关表上的索引相同,服务器B SP执行时没有阻塞
答案 0 :(得分:1)
有很多可能性,但如果两个环境中的数据和硬件应该相似,那么它的parameter sniffing可能会继续吗?
基本上,这意味着第一次运行程序时,会使用当前参数进行计划,并且该计划随程序一起保存。下次运行该过程时,它会重用旧计划,这可能对新参数非常不利。
您可以尝试添加" WITH RECOMPILE"看看是否会彻底改变表现
ALTER PROCEDURE <procedure>
<Parameters>
WITH RECOMPILE
AS