4

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

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

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

执行计划没问题,索引使用得当,查询一般需要两秒才能执行。

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

瞬态故障处理不适用于超时情况。

这种行为的原因可能是什么?

4

1 回答 1

3

我们过去使用 SQL Azure 也遇到过类似的问题;经常针对少于 10 行的表运行的查询,甚至是标准的 .Net 成员资格提供程序查询,都因超时而间歇性失败。这通常是当我们的服务几乎没有活动时;主要是在晚上。

在可以安全重试 SQL 超时(通常是读取操作)的常用区域中,我们已将超时异常添加到我们的自定义错误检测策略中,取自瞬态故障处理块;但是,正如您所说,这在大多数情况下是不合适的。

到目前为止,我们从 Azure 支持中得到的最好解释是,因为 SQL Azure 实际上是一个共享的 SQL Server 实例,可供多个客户端使用;如果一个用户执行密集操作,它可能会以这种方式影响其他用户。然而; 相信这是不可接受的,我们仍在与 SQL Azure 支持人员联系,以确定为什么限制不能阻止此类活动影响我们。

你最好的选择是:

  • 通过论坛或直接联系SQL Azure 支持(如果您有支持包)
  • 如果可能的话; 尝试设置一个新的 SQL Azure 实例并迁移您的数据库
    • 虽然我们在一个 SQL Azure 实例上间歇性地遇到了这个问题;我们从未在其他 2 个实例上体验过它。

作为旁注;我们仍在等待 Azure 支持人员回复我们为什么仍然收到超时异常。

于 2013-07-12T10:09:40.857 回答