这不是一个非常技术性的问题,因为我只是在寻找理论为什么会发生这样的事情。
在我们的应用程序中,我们有一些不同的存储过程,它们主要读取相同的表。我们一直在监视SQL Server并尝试敲除列表中最昂贵的查询(最高I / O,CPU时间等)。通过更改SQL和/或更改应用程序,我们已经看到了很多收获。
无论如何,我们更改了存储过程#1并将其释放。正如预期的那样,表现更好。然而,存储过程#2(读取类似数据)突然看到它的性能指标降低(它消耗了更多的I / O)。
我们在发布后仍处于更好的位置,但我想弄清楚为什么会发生这种情况。到目前为止,我一直无法复制这个问题(无论我如何使用存储过程,它仍然对我来说仍然很好)。
此外,存储过程在每次生产中都表现不佳。它运行的大多数时间,它表现得很好。
有什么想法吗?
我们正在使用SQL Server 2008.我们没有改变任何索引。
答案 0 :(得分:0)
这看起来似乎没什么关系,但是幽默我并检查数据库实例上的 max degree of parallelism :
EXEC sp_configure'max degree of parallelism'
我的怀疑是你的SP的零星执行总是一直在发生,但是由于数据库的糟糕表现而被掩盖了。有可能将此配置值设置为0,默认情况下这是一件坏事。您需要根据应该引用此KB的各种因素将此值更改为1到8之间的值:http://support.microsoft.com/kb/2806535
我有一种感觉,你不时会得到一个失控的并行查询,这可以解释你所看到的行为,而改变这个值将有助于抑制这一点。
P.S。我很抱歉没有对这个问题发表评论,但我的声誉还不够高......