在我们的系统上,该系统由使用数据库 sql-azure 的 Web 角色实现,我们在特定查询上遇到重复超时。
这些超时在白天发生几个小时,然后不再出现。
该查询有两个表,其中行数不是很高(大约 800,000 行),使用主键进行连接。
执行计划没问题,索引使用得当,查询一般需要两秒才能执行。
没有 EntityFramework 的测试给出相同的结果。
瞬态故障处理不适用于超时情况。
这种行为的原因可能是什么?
在我们的系统上,该系统由使用数据库 sql-azure 的 Web 角色实现,我们在特定查询上遇到重复超时。
这些超时在白天发生几个小时,然后不再出现。
该查询有两个表,其中行数不是很高(大约 800,000 行),使用主键进行连接。
执行计划没问题,索引使用得当,查询一般需要两秒才能执行。
没有 EntityFramework 的测试给出相同的结果。
瞬态故障处理不适用于超时情况。
这种行为的原因可能是什么?
我们过去使用 SQL Azure 也遇到过类似的问题;经常针对少于 10 行的表运行的查询,甚至是标准的 .Net 成员资格提供程序查询,都因超时而间歇性失败。这通常是当我们的服务几乎没有活动时;主要是在晚上。
在可以安全重试 SQL 超时(通常是读取操作)的常用区域中,我们已将超时异常添加到我们的自定义错误检测策略中,取自瞬态故障处理块;但是,正如您所说,这在大多数情况下是不合适的。
到目前为止,我们从 Azure 支持中得到的最好解释是,因为 SQL Azure 实际上是一个共享的 SQL Server 实例,可供多个客户端使用;如果一个用户执行密集操作,它可能会以这种方式影响其他用户。然而; 相信这是不可接受的,我们仍在与 SQL Azure 支持人员联系,以确定为什么限制不能阻止此类活动影响我们。
你最好的选择是:
作为旁注;我们仍在等待 Azure 支持人员回复我们为什么仍然收到超时异常。