【问题标题】:Delta between query execution time and Java query call to finish查询执行时间和 Java 查询调用完成之间的增量
【发布时间】:2017-09-10 15:55:32
【问题描述】:

上下文

  • 我们的容器集群位于@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);

谢谢

【问题讨论】:

    标签: java google-bigquery google-cloud-platform


    【解决方案1】:

    这里只是简单地看一下代码: https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2016-01-13
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多