1

我正在使用 SQL Server 2008 R2。

过程其实是这样的:

首先,从远程服务器中提取大约200 万条记录,

然后在本地完成连接,

最终结果是数千条记录

时间成本从不到 1 分钟到 30 分钟不等。

而在我经历了 30 分钟的延迟之后,接下来的时间成本似乎都只有 3 分钟左右。

它是相同的数据,相同的SP。

什么会导致这种巨大的差异?

更新

我删除SP,重新启动SQL server服务,重新创建SP。执行只用了50秒!

怎么了?

4

2 回答 2

2

您描述的行为似乎很极端 - 但是(如果您排除客户端),有 3 个合乎逻辑的地方可以查看。

首先是数据库服务器上的查询执行。值得使用查询分析器工具来查看它是否使用任何索引 - 到目前为止,数据库查询性能可变的最常见原因是查询没有使用(正确的)索引,因此查询缓存的影响发挥了作用很大一部分。SQL Server 将缓存大量数据,并且您的 proc 的第一次运行会填充该缓存;第二次运行速度更快,因为它会命中缓存。一段时间后,缓存变得陈旧,运行过程再次变慢。

第二种可能性是数据库服务器不稳定——它可能不够强大,无法完成它应该完成的所有工作。在那种情况下,有一天你很幸运,拥有所有的服务器资源;接下来,其他人正在运行查询,而您的查询速度变慢。这会使所有查询变慢,而不仅仅是这个——所以听起来不太可能。

第三种可能性是网络怪异——正如菲尔所说,“数千条记录”并没有什么可怕的,但如果它们很大,并且你的网络中充斥着小猫的照片,它可能会产生影响。同样,这将表现为一般的网络缓慢,并且不太可能解释 30 分钟的延迟......

于 2012-04-27T08:24:47.100 回答
0

第四,有什么事情同时发生吗?

五、你的SP是否使用动态生成的SQL语句?这将导致 SP 无法预编译。如果可能的话,将这些语句分成子 SP。

于 2012-04-27T10:33:39.217 回答