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