测量Google BigQuery中SQL代码平均运行耗时的方法咨询
BigQuery SQL性能测试的误差控制方案疑问
BigQuery属于共享多租户资源,同一段代码在平台上多次运行,很可能得到差异较大的耗时结果。
我日常用来规避缓存影响的常用方案,是在Query Settings的Cache preference中关闭缓存,开启该设置后查询不会命中历史缓存结果,但这个设置存在明显缺陷:只要刷新浏览器,或是页面处于闲置状态一段时间,Cache preference选项会自动恢复为勾选状态。
此前和负责代码优化的开发人员交流时得知,他们采用的测试逻辑为:
- 针对运行缓慢的待优化代码,连续运行5次计算平均耗时作为基准值
- 完成代码优化后,将优化后的SQL连续运行5次,取平均值作为优化后SQL的耗时结果
我对这套方案的细节设计逻辑了解不多,个人更倾向于全程在BQ控制台按以下流程操作来控制变量:
- 创建独立用户会话
- 关闭SQL查询缓存
- 在BQ控制台中粘贴待优化的慢查询代码
- 在同一会话内紧接着粘贴优化后的SQL代码
- 运行这两段以
;分隔的代码
这套流程可以保证BigQuery集群负载过高、连接延迟波动等系统干扰因素,对两段SQL的影响完全一致,能够抵消系统层面的误差。我认为在确认缓存关闭的前提下,仅需运行1次即可得到有效对比结果,想确认连续运行5次取平均值的操作是否多余,也欢迎大家提出各类建议与反馈。
内容的提问来源于stack exchange,提问作者Mich Talebzadeh
相关产品推荐
相关产品推荐

