如何调试特定 SQL 偶尔会导致 BigQuery “请求超时。请重试”
Posted
技术标签:
【中文标题】如何调试特定 SQL 偶尔会导致 BigQuery “请求超时。请重试”【英文标题】:How to debug specific SQL occasionally result in BigQuery "Request timed out. Please try again" 【发布时间】:2018-05-29 15:44:15 【问题描述】:在过去一周左右,我们以交互模式提交给 BigQuery 的 SQL 子集(每天数千个中的一位数)开始需要数小时而不是数秒。超时作业的 SQL 出现在非常特殊的情况下。我能够在 BigQuery 控制台中通过这两个作业重现该行为:
工作调用(在 5 秒内运行):
Job ID bluecore-qa:US.bquijob_4e0e4662_1639a278fcf
Creation Time May 25, 2018, 9:54:34 PM
Start Time May 25, 2018, 9:54:34 PM
End Time May 25, 2018, 9:54:39 PM
Bytes Processed 176 MB
Bytes Billed 177 MB
Slot Time (ms) 271 K
6 小时后超时的完全相同的 SQL(不到一分钟后运行):
Job ID bluecore-qa:US.bquijob_57c799e2_1639a2852fa
Creation Time May 25, 2018, 9:55:24 PM
Start Time May 25, 2018, 9:55:24 PM
Query Priority Interactive
Job Type State Start Time Duration User Email Bytes Processed Bytes Billed Billing Tier Labels
---------- --------- ----------------- ---------- --------------------- ----------------- -------------- -------------- --------
query FAILURE 25 May 21:55:24 5:59:45 xxxxx
Error encountered during job execution:
Request timed out. Please try again.
请注意,SQL 确实使用了“IGNORE CASE”,这在过去对我们来说是个问题(但通常会导致“内部错误”情况)。
有没有办法获取有关作业的更多信息,以查看第二个作业是否被推回到 BigQuery 调度队列中? (根据 BigQuery StackDriver 的统计数据,我们项目的 2000 个插槽限制远低于此限制)。
【问题讨论】:
我建议 filing a bug report 提供指向此帖子的链接和示例作业 ID。 感谢 Elliott,完成:issuetracker.google.com/issues/80407917 【参考方案1】:在 BigQuery 中,作业永远不会推回 BigQuery 调度队列(即使在流式和交互模式下也是如此)。
您可以使用Audit logs 获取有关超时的更多详细信息。审核日志记录是 Stackdriver 目前唯一可用的替代方法。
【讨论】:
感谢 Shahin,审核日志仅显示“请求超时。请重试”消息,但很遗憾。 BigQuery 客户端只有这两个工具可用。检查您的日志后,我确定这与 Google 方面的内部问题有关。【参考方案2】:这是一个 Google BigQuery 附带问题。他们正在修复问题,一旦解决,将更新https://issuetracker.google.com/issues/80407917。
【讨论】:
以上是关于如何调试特定 SQL 偶尔会导致 BigQuery “请求超时。请重试”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google BigQuery 中列出与特定名称匹配的表?
如何在 BigQuery SQL 中将一组用户分组为 10 个群组?