【发布时间】:2023-03-14 21:50:01
【问题描述】:
在查询 Azure 表存储数据时,我们发现了一些非常可变的延迟。我们有许多项,每个项都获取按天分解的时间序列数据,如下所示:
分区键:{DATA_TYPE}_{YYYMMdd} - 4 种不同的数据类型,总共大约 2 年的数据
行键:{DataObjectId} - 每天大约 3-4,000 条记录。
记录本身是一个 JSON 编码的 dateTime 对象数组,每 15 分钟分布一次。
所以我想检索过去几天特定对象的时间序列数据,所以我构造了以下查询:
string.Format("(PartitionKey ge '{0}') and (PartitionKey le '{1}') and (RowKey eq '{2}')", lowDate, highDate, DataObjectId);
如上所述,我们现在有 2-3 年的记录。
总体而言,查询时间相当快,为 600-800 毫秒。然而,有一次或两次我们得到几个值,似乎需要很长时间才能从这些分区中检索数据。即一两个查询需要 50 秒以上才能返回数据。
我们不知道系统承受着巨大的负载。事实上,令人沮丧的是,我们在门户网站中发现的所有图表都表明没有真正的问题。
想到的一些建议:
1.) add year component first making the partition keys immediately more selective.
然而,最令人沮丧的是执行查询所需的时间变化。
Azure 门户中的 Azure 存储延迟平均约为 117.2 毫秒,报告的最大值为 294 毫秒。我将此解释为网络延迟。
当然,任何建议都非常感谢。最让人头疼的是执行时间如此多变。在极少数情况下,我们看到我们的应用程序使用延续令牌,因为查询需要 5 秒以上才能完成。
https://msdn.microsoft.com/en-us/library/azure/dd179421.aspx
【问题讨论】:
标签: c# azure query-performance azure-table-storage