查询执行时间和完成 Java 查询调用之间的增量



>上下文

  • 我们的容器集群位于@ us-east1-c
  • 我们正在使用以下Java库:google-cloud-bigquery,0.9.2-beta
  • 我们的数据集大约有 26M 行,代表 ~10G
  • 我们所有的查询返回少于 100 行,因为我们总是在特定列上分组

问题

我们分析了在 BigQuery 中执行的最后 100 个查询,这些查询都在大约 2-3 秒内执行(我们通过调用bq --format=prettyjson show -j JOBID,结束时间 - 创建时间来分析这一点)。

不过,在我们的 Java 日志中,对bigquery.query的大多数调用都会阻塞 5-6 秒(10 秒并不罕见)。什么可以解释在 BigQuery 集群中完成的查询与在 Java 中提供的结果之间的系统性差距?我知道 5-6 秒不是天文数字,但我很好奇这在使用 Java BigQuery 云库时是否是一种正常行为。

我没有挖掘到使用Wireshark分析出站呼叫的地步。我们所有的测试都是在我们的容器集群(Kubernetes)中执行的。

法典

QueryRequest request = QueryRequest.newBuilder(sql)
.setMaxWaitTime(30000L)
.setUseLegacySql(false)
.setUseQueryCache(false)
.build();
QueryResponse response = bigquery.query(request);

谢谢

只是在这里简要查看代码: https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java

似乎有多种潜在的延迟来源:

  • 获取查询结果
  • 重新启动(其中有一些自动重新启动可以解释延迟峰值)
  • 检查新结果的频率

听起来看Wireshark会给你一个关于正在发生的事情的准确答案。

最新更新