我使用的是SQL Server 2008 R2。
这个过程实际上是这样的:
首先,从远程服务器中提取 200万个记录,
然后在本地完成连接,
最终结果是数千条记录。
时间成本从1分钟到30分钟不等。
在我经历了30分钟的延迟之后,似乎以下时间成本仅为3分钟左右。
相同数据,相同 SP。
什么可能导致这种巨大的差异?
我删除SP,重新启动SQL服务器服务,然后重新创建SP。执行只用了50秒!
怎么了?
答案 0 :(得分:2)
您描述的行为似乎极端 - 但(如果您排除客户端),有3个逻辑位置可供查看。
第一个是数据库服务器上的查询执行。值得使用查询分析器工具查看它是否使用任何索引 - 到目前为止,数据库查询的可变性能最常见的原因是查询不使用(右)索引,并且因此查询缓存的影响起了很大作用。 SQL Server将缓存大量数据,并且proc的第一次运行会填充该缓存;第二次运行更快,因为它命中缓存。过了一会儿,缓存变得陈旧,并且运行proc再次变慢。
第二种可能性是数据库服务器不稳定 - 它可能不够强大,无法完成它应该做的所有工作。在这种情况下,有一刻你很幸运,拥有自己的所有服务器资源;接下来,其他人正在运行查询,而你的查询速度变慢。这会使所有查询变慢,而不仅仅是这一个 - 因此听起来不太可能。
第三种可能性是网络怪异 - 正如菲尔所说,"成千上万的记录"没有什么可怕的,但如果他们变得很大,而你的网络已经饱含了小猫的照片,那么可能会产生影响。再次,这将表现为一般的网络缓慢,并且不太可能解释延迟30分钟...
答案 1 :(得分:0)
第四,同时发生的事情是什么?
第五,您的SP是否使用动态生成的SQL语句?这将导致SP不被预编译。如果可能的话,将这些陈述分离到子SP中。