2013-07-03 19 views
4

在我们的系统上,该系统由使用数据库sql-azure的Web角色实现,我们在特定查询中遇到重复性超时。Sql-Azure上的重复性超时

这些超时在白天发生几个小时,然后不再出现。

查询有两个表的行数不是很高(大约800,000行),使用主键进行连接。

执行计划没问题,索引使用正常,查询通常需要两秒钟才能执行。

没有EntityFramework的测试给出了相同的结果。

暂停故障处理不适用于超时情况。

这种行为的原因是什么?

+0

什么是您的超时设置?你是否尝试过更高的超时时间?并且是与建立连接或运行查询有关的超时?如果您的查询是CPU密集型的,或者SQL Azure繁忙,则SQL Azure可能会减慢您的执行速度(CPU限制)。 –

+0

查询sys.event_log表可以帮助查找限制或连接问题的证据。 –

+0

谢谢,通常我使用默认的超时时间,我尝试了更高的超时时间,并没有任何效果。 超时是相对于查询的执行。 在sys.event_log中,没有关于超时的日志条目。 – Francesco

回答

3

我们在过去使用过SQL Azure时遇到过类似的问题;经常针对少于10行的表进行查询,甚至是标准的.Net成员资格提供者查询,所有查询都会因为超时而间歇性地失败。这通常是我们对我们的服务几乎没有任何活动的时候;大多在晚上。

在SQL Timeout(通常是读操作)可以安全重试的常用领域,我们在我们的自定义错误检测策略中添加了超时异常,取自Transient Fault Handling Block;然而正如你所说,这在大多数情况下并不合适。

迄今为止,我们从Azure支持获得的最佳解释是,由于SQL Azure实际上是多个客户端使用的共享SQL Server实例;如果一个用户执行密集操作,则可能以这种方式影响其他用户。然而;相信这是不可接受的,我们仍然与SQL Azure支持联系,以确定为什么节流不会阻止这类活动影响我们。

你最好的赌注是:

  • 联系SQL Azure Support无论是通过论坛或直接(如果你有一个支持包)
  • 如果可能的话;尝试设置新的SQL Azure实例并跨数据库迁移
    • 虽然我们在一个SQL Azure实例上间歇性地获取此问题;我们在其他两个实例中从未体验过它。

作为一个附注;我们仍在等待Azure支持部门回复我们为什么仍然收到超时异常。

+1

此更新;自从我写这篇文章以来,SQL Azure已经发生了很大的变化,我相信他们已经采取措施阻止客户在共享实例之间相互影响。如果您希望获得更多回报,还有[高级专用服务器](https://azure.microsoft.com/en-gb/pricing/details/sql-database/)。截至2015年4月(上次我专业使用SQL Azure),我们不再收到这些间歇性超时问题。 –