为什么查询 azure 指标表这么慢,我该如何加快速度?
Why is it so slow to query azure metrics tables and how can I speed it up?
我正在尝试从其中一个 WADMETRIC 表中提取数据,但即使我设置一个查询来简单地查询最后一分钟的数据,它也需要几个小时才能 运行!
无论我是使用 Java sdk 还是从门户上的 logviewer 查询它,都会发生这种情况。
我做错了什么?我应该等这么久吗?
如有任何帮助,我们将不胜感激。
这是我的 java 代码。
String connectionString = String.format("DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s", "imgoriginalblobs", "lAHAdJcjUcak48lvNwOoC2UztAcqD+hLX/YMdXq/qppQOgeuzQXTDMtYL3jx/oT+a0hxURqlF2Nv9Fza686s8g==");
CloudStorageAccount account = CloudStorageAccount.parse(connectionString);
CloudTableClient cloudTableClient = account.createCloudTableClient();
Calendar myCal = Calendar.getInstance();
Date now = myCal.getTime();
myCal.set(Calendar.MINUTE, Calendar.getInstance().get(Calendar.HOUR) - 1);
Date theDate = myCal.getTime();
String queryString = TableQuery.combineFilters(
TableQuery.combineFilters(TableQuery.generateFilterCondition("Timestamp", TableQuery.QueryComparisons.GREATER_THAN_OR_EQUAL, theDate),
TableQuery.Operators.AND,
TableQuery.generateFilterCondition("CounterName", TableQuery.QueryComparisons.EQUAL, "/builtin/filesystem/freespace")),
TableQuery.Operators.AND,
TableQuery.generateFilterCondition("Timestamp", TableQuery.QueryComparisons.LESS_THAN_OR_EQUAL, now));
TableQuery<TableMetric> query = TableQuery.from(TableMetric.class).where(queryString);
CloudTable table = cloudTableClient.getTableReference("WADMetricsPT1MP10DV2S20191017");
System.out.println(table.exists());
System.out.println(table.getName());
for (TableMetric entity : table.execute(query)) {
extractPartitionKey(entity.getPartitionKey(), entity.getLast(), entity.getCounterName());
}
还有一张我最近5分钟尝试查询数据的截图,这个已经挂了一个多小时了。
我认为问题是因为您没有指定分区键。因此它对可能存储在多个区域中的所有分区执行查询,这就是需要很长时间才能为您提供所需输出的原因。
一般来说,在 Azure table 存储中存储和检索指标有很多限制。查看 Azure Monitor 中的自定义指标,看看它是否可以满足您的方案和要求。
https://docs.microsoft.com/en-us/azure/azure-monitor/platform/metrics-custom-overview
我正在尝试从其中一个 WADMETRIC 表中提取数据,但即使我设置一个查询来简单地查询最后一分钟的数据,它也需要几个小时才能 运行!
无论我是使用 Java sdk 还是从门户上的 logviewer 查询它,都会发生这种情况。
我做错了什么?我应该等这么久吗?
如有任何帮助,我们将不胜感激。
这是我的 java 代码。
String connectionString = String.format("DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s", "imgoriginalblobs", "lAHAdJcjUcak48lvNwOoC2UztAcqD+hLX/YMdXq/qppQOgeuzQXTDMtYL3jx/oT+a0hxURqlF2Nv9Fza686s8g==");
CloudStorageAccount account = CloudStorageAccount.parse(connectionString);
CloudTableClient cloudTableClient = account.createCloudTableClient();
Calendar myCal = Calendar.getInstance();
Date now = myCal.getTime();
myCal.set(Calendar.MINUTE, Calendar.getInstance().get(Calendar.HOUR) - 1);
Date theDate = myCal.getTime();
String queryString = TableQuery.combineFilters(
TableQuery.combineFilters(TableQuery.generateFilterCondition("Timestamp", TableQuery.QueryComparisons.GREATER_THAN_OR_EQUAL, theDate),
TableQuery.Operators.AND,
TableQuery.generateFilterCondition("CounterName", TableQuery.QueryComparisons.EQUAL, "/builtin/filesystem/freespace")),
TableQuery.Operators.AND,
TableQuery.generateFilterCondition("Timestamp", TableQuery.QueryComparisons.LESS_THAN_OR_EQUAL, now));
TableQuery<TableMetric> query = TableQuery.from(TableMetric.class).where(queryString);
CloudTable table = cloudTableClient.getTableReference("WADMetricsPT1MP10DV2S20191017");
System.out.println(table.exists());
System.out.println(table.getName());
for (TableMetric entity : table.execute(query)) {
extractPartitionKey(entity.getPartitionKey(), entity.getLast(), entity.getCounterName());
}
还有一张我最近5分钟尝试查询数据的截图,这个已经挂了一个多小时了。
我认为问题是因为您没有指定分区键。因此它对可能存储在多个区域中的所有分区执行查询,这就是需要很长时间才能为您提供所需输出的原因。
一般来说,在 Azure table 存储中存储和检索指标有很多限制。查看 Azure Monitor 中的自定义指标,看看它是否可以满足您的方案和要求。
https://docs.microsoft.com/en-us/azure/azure-monitor/platform/metrics-custom-overview