【问题标题】:Drastic difference of the time cost for the same store procedure同一存储过程的时间成本差异巨大
【发布时间】:2012-04-27 08:09:10
【问题描述】:

我使用的是 SQL Server 2008 R2。

过程其实是这样的:

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

然后在本地完成连接,

最终结果是上千条记录

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

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

这是相同数据,相同 SP。

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

更新

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

怎么了?

【问题讨论】:

  • 如果在服务器上运行,s/p 需要多长时间才能运行?数以千计的记录很小 - 不应该超过几秒钟。
  • 这数千条记录是远程服务器上几个大表连接的结果。我没有权限直接在远程服务器上运行 SP。

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      相关资源
      最近更新 更多