>上下文
- 我们的容器集群位于@ 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会给你一个关于正在发生的事情的准确答案。