【问题标题】:Random timeouts on 1 specific stored procedure from SQL Azure来自 SQL Azure 的 1 个特定存储过程的随机超时
【发布时间】:2013-12-21 09:42:02
【问题描述】:

我们有一个托管在 SQL Azure 中的数据库,我们通过云服务 Web 应用程序连接到该数据库。每隔一段时间,一个返回 100 行的特定存储过程在从实际 webapp 运行时会引发超时异常。当我们从 SQL Management Studio 使用相同的参数运行相同的存储过程时,我们会得到实际结果。这个问题会持续一段时间,有时会像发生时一样快地消失。

我们的应用程序中的其他存储过程和数据检索就像一个魅力,但一个特定的 SP 有这个问题,这很奇怪。当问题发生时,我们可以通过在 where 子句中添加类似WHERE 1=1 的内容来临时修复它。然后它工作了一段时间,但在某些时候,整个事情又重新开始了。我无法掌握这里出了什么问题或可能导致这种情况的原因。我们还在存储过程中添加了WITH RECOMPILE,但无济于事。

【问题讨论】:

  • SQL Azure 标准或高级数据库?存储过程需要多长时间才能运行,即您是否接近限制?看看msdn.microsoft.com/en-us/library/windowsazure/ff394114.aspx,特别是监控查询性能。只需检查您是否存在性能瓶颈。
  • 这是一个 1GB 的 SQL Azure Web 版数据库。通常存储过程大约需要 2 秒,但一旦出现此问题,它就会持续 30 秒并超时(默认 SqlCommand 超时)。但是,当我用一些无意义的东西对其进行调整时,它会立即在 2 秒内再次运行。此问题仅发生在 Azure 的生产环境中,而不是本地或“普通”服务器上。对我来说,这听起来有点像程序一旦改变就被缓存和失效,但我真的不知道去哪里找。
  • 在瓶颈列表中找到查询了吗?
  • 我查了一下,它在列表的顶部。但是,我不知道如何以不同的方式重写它。
  • 在 Sql Server Management Studio 中运行 Display Estimated Execution Plan,您应该能够看到查询的成本,以及是否有可能添加一两个索引以提高性能。

标签: sql-server stored-procedures azure timeout azure-sql-database


【解决方案1】:

我也经历过同样的事情。我检查了执行计划,一切看起来都很好。所以我将数据库复制到我的本地机器上,它在那里运行没有任何问题。最后我决定删除并重新创建超时的存储过程。之后,SP 再次正常运行,没有超时。

【讨论】:

    【解决方案2】:

    我们遇到了同样的问题,尤其是在升级或降级服务器之后。我们发现包括“重新编译”在内的快速更改可以解决问题。修改一次后,我们关闭重新编译。不确定 Azure 是否在执行计划中出现某种损坏或正在发生什么。不相信您需要“重新编译”,您可能只需要进行更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多