改变了一个存储过程,另一个失去了性能?

时间:2013-04-15 14:07:43

标签: sql sql-server performance sql-server-2008 stored-procedures

这不是一个非常技术性的问题,因为我只是在寻找理论为什么会发生这样的事情。

在我们的应用程序中,我们有一些不同的存储过程,它们主要读取相同的表。我们一直在监视SQL Server并尝试敲除列表中最昂贵的查询(最高I / O,CPU时间等)。通过更改SQL和/或更改应用程序,我们已经看到了很多收获。

无论如何,我们更改了存储过程#1并将其释放。正如预期的那样,表现更好。然而,存储过程#2(读取类似数据)突然看到它的性能指标降低(它消耗了更多的I / O)。

我们在发布后仍处于更好的位置,但我想弄清楚为什么会发生这种情况。到目前为止,我一直无法复制这个问题(无论我如何使用存储过程,它仍然对我来说仍然很好)。

此外,存储过程在每次生产中都表现不佳。它运行的大多数时间,它表现得很好。

有什么想法吗?

我们正在使用SQL Server 2008.我们没有改变任何索引。

1 个答案:

答案 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。我很抱歉没有对这个问题发表评论,但我的声誉还不够高......