【发布时间】:2014-04-18 03:34:10
【问题描述】:
在 SQL Server 上运行存储过程时,我们遇到了一种奇怪的情况。当使用相同的参数运行完全相同的过程时(我们已经通过 SQL Server Profiler 捕获了这一点),我们会得到非常可变的 CPU 使用率。现在显然这取决于服务器负载和服务器上正在进行的其他活动。但是,我不希望我们在随后的情况下运行 SP 时遇到“读取”的可变性 - 仅相隔几分钟。
Day Hour Min CPU Reads
70 15 54 4851 33079
70 15 54 5960 33723
70 15 58 5538 30189
70 16 10 5226 29672
70 16 12 24102 1019178
70 16 17 23915 1017621
70 16 17 26348 1018690
70 16 30 6443 28121
70 16 30 6474 28539
70 16 33 5242 27245
70 16 33 6365 27338
70 16 35 5413 27335
离奇。当我们以前没有然后重置自己时,为什么我们会突然获得大量读取。我要再说一次 - 我们对这个过程有完全相同的参数,所以为什么它突然决定它必须进行大量读取,这有点奇怪。
关于看什么有什么想法吗?我们知道一些额外的查询可能会带来一些好处(例如查询分析器建议一个),但我们不希望看到大致相同的读取次数吗?
谢谢 安迪
【问题讨论】:
-
能否请您也添加程序定义?
-
检查在读取时间上升到该stp正在使用的表之前或同时是否有任何插入。
-
听起来可能是参数嗅探问题。
-
恐怕不能添加过程(这是可怕的 SQL)——它基本上创建了几个 #temp 表,然后在一些内联 SQL 中使用......(不要问,我没写)。我们在世界各地的不同网站上使用它,而且只有在英国我们才遇到这个问题。它周围没有大量数据更改,但会有插入和更新,但为什么会突然导致读取量大幅上升然后再次下降?当参数发生变化时,我可以理解参数嗅探,但当它们仅相隔几分钟相同时,我就无法理解。
标签: sql sql-server performance