为什么使用ExecuteQuery查询Azure表存储返回的结果少于ExecuteQuerySegmented?

时间:2018-03-02 16:10:34

标签: azure azure-storage azure-table-storage

我很好奇Azure是否可以在ExecuteQuery上超时,或者如果存在内存限制导致ExecuteQuery返回的记录少于ExecuteQuerySegmented,则无提示错误。

当我运行ExecuteQuery时,我总共得到了1,223,749条记录。

当我运行ExecuteQuerySegmented时,我总共得到1,482,504条记录。

这两个查询是:

(ExecuteQuerySegmented位于处理令牌的do / while内部)

var queryResult = table.ExecuteQuerySegmented(new TableQuery<RecordType>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, PartitionValue, token);

var query = new TableQuery<RecordType>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, PartitionValue));
results.AddRange(table.ExecuteQuery(query));

1 个答案:

答案 0 :(得分:0)

对Table服务API的调用可以包括在请求URI的timeout参数中指定的服务器超时间隔。如果在服务处理完请求之前服务器超时间隔已过,则服务将返回错误。

表服务操作的最大超时间隔为30秒。 Table服务会自动将超过30秒的任何超时减少到最大30秒。

Table服务按如下方式强制执行服务器超时:

查询操作:在超时间隔期间,查询最多可执行五秒钟。如果查询未在五秒间隔内完成,则响应包括用于在后续请求中检索剩余项目的继续令牌。有关详细信息,请参阅查询超时和分页。

我建议您查看以下documentation

如果查询超过30秒,这可能意味着ExecuteQuery显示的记录是由超时引起的。