【发布时间】: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