智能加速方案生成与使用说明
工作簿的智能加速功能会在查询运行期间分析 SQL,并在存在可预计算、可重用的逻辑时生成加速方案。用户选择方案后,系统才会创建或更新投影(RP)。
生成方案不等于已完成加速
方案生成阶段只判断“哪些查询逻辑适合预计算”。单击「一键加速」并等待投影构建成功后,后续查询才可能命中投影。当前已经运行的查询不会重启,也不会因为方案生成而立即变快。
使用前提
- 在「个人信息 > 偏好设置」中开启「工作簿-智能加速推荐」。关闭后,工作簿不会展示智能加速提示。
- 查询需要通过工作簿正常提交,并且系统能够取得完整的查询任务信息、SQL、集群和访问的数据对象。
- 执行一键加速的用户需要具备方案中源表或视图的访问权限,以及创建视图和投影所需的权限。
方案生成的完整判断链
工作簿在查询运行期间周期性请求加速方案。系统按以下顺序判断,任意一项不满足都可能不生成方案。
flowchart TD
A["工作簿提交查询"] --> B{"个人偏好已开启<br/>智能加速?"}
B -- "否" --> Z1["不展示推荐"]
B -- "是" --> C{"能否取得<br/>查询任务详情?"}
C -- "否" --> Z2["无方案"]
C -- "是" --> D{"是普通查询,且不是<br/>系统表 / 失败 / 取消任务?"}
D -- "否" --> Z3["无方案"]
D -- "是" --> E{"实际 RUNNING 耗时<br/>超过配置阈值?"}
E -- "未超过,仍在运行" --> P["继续轮询等待"]
P --> E
E -- "未超过,已完成" --> Z4["无方案"]
E -- "已超过" --> F{"已识别实际扫描对象?"}
F -- "否" --> P2["任务运行中则等待<br/>否则结束"]
F -- "是" --> G["解析、校验 SQL<br/>生成逻辑计划"]
G --> H{"是否存在可支持的<br/>可预计算片段?"}
H -- "否" --> Z5["无方案"]
H -- "是" --> I{"候选片段的数据来源<br/>与本次查询一致?"}
I -- "否" --> Z6["跳过该候选"]
I -- "是" --> J{"是否已有启用且<br/>覆盖需求的投影?"}
J -- "是" --> Z7["该候选无需重复推荐"]
J -- "否" --> K["生成新建或合并<br/>投影的建议"]
K --> L{"至少有一个<br/>有效投影建议?"}
L -- "否" --> Z8["无方案"]
L -- "是" --> M["保存方案并在工作簿<br/>展示智能加速提示"]
1. 检查查询类型和状态
以下任务不进入方案生成:
- 查询 AIR 系统表的 SQL。
- 非查询语句,例如 DDL、DML 或不进入 AIR 逻辑计划的原生查询。
- 已失败或已取消的查询。
2. 检查实际运行耗时
系统只统计查询进入 RUNNING 阶段后的耗时,不把 PENDING、STARTING 和 PLANNING 耗时计入加速阈值。
- 默认阈值为 10 秒,实际值以当前集群的
query.accelerate.running.ms.threshold配置为准。 - 运行耗时必须严格超过阈值。等于阈值时仍不生成方案。
- 查询未超过阈值且仍在运行时,页面继续等待。
- 查询在超过阈值前已完成时,本次查询不会生成推荐。
Note
查询的总耗时可能超过 10 秒,但如果主要耗时发生在排队或计划阶段,RUNNING 阶段仍可能没有超过阈值。
3. 检查数据来源是否就绪
系统需要从查询任务中取得实际扫描的表或视图路径。若路径信息还未生成,查询运行期间会继续等待;查询结束后仍无法取得时,不会展示方案。
对于查询视图的场景,系统会同时参考:
- 视图展开后实际扫描的物理表路径。
- 用户 SQL 中原始引用的视图路径。
候选片段的所有数据来源必须能与上述任一路径匹配,否则会被跳过。该检查用于避免对已被其他投影改写的扫描路径、无效中间对象或不完整来源生成错误建议。
4. 提取可预计算的 SQL 片段
智能加速不是对任意 SQL 整体生成快照,而是从逻辑计划中提取可复用的片段。当前可直接进入候选的结构包括:
| SQL 结构 | 支持范围 |
|---|---|
| 单表扫描 | 支持字段选择和过滤条件 |
| 多表关联 | 可预计算片段内的 Join 必须是 INNER JOIN |
| 聚合 | 聚合输入需由表扫描、字段选择、过滤和 INNER JOIN 组成 |
| 分组字段 | GROUP BY 字段需能明确追溯到单个源字段 |
| 聚合函数 | 支持 SUM、COUNT、MIN、MAX,参数需能追溯到源字段 |
对于包含外连接、窗口函数、排序、复杂表达式或集合运算的 SQL,不支持的算子不会被纳入加速片段。如果其下层还存在可支持的子片段,系统仍可能只对子片段生成建议;否则不会生成方案。相关子查询(Correlated Subquery)当前不作为可加速片段。
5. 生成投影建议
系统根据候选片段涉及的数据对象数量选择方案:
- 单个数据对象:尝试直接在该表或视图上创建明细投影或聚合投影。明细投影保留查询输出、过滤和关联所需字段;聚合投影保留可识别的维度和度量。
- 多个数据对象:生成用于封装该计算片段的系统视图,再在系统视图上创建明细投影,以预计算 Join 等关系运算。
生成建议前还会检查已有的启用投影:
- 如果已有明细投影覆盖了本次所需的全部字段,不重复推荐。
- 如果已有聚合投影覆盖了所需的维度和度量,不重复推荐。
- 如果已有的投影也来自智能加速策略,且具备可合并条件,系统可建议在原投影上补充字段或维度,而不是新建重复投影。
所有候选片段都被过滤后,如果没有剩余的有效建议,工作簿不会展示智能加速提示。 当前版本会把本次分析得到的有效投影建议组合为一个默认方案,一个方案中可包含多个需要创建或更新的投影。
用户选择方案后会发生什么
- 系统按方案创建或更新投影。多对象方案会先创建系统视图。
- 投影进入构建流程,可在方案详情或查询记录中查看进度。
- 投影构建成功并进入可用状态后,后续查询才会在计划阶段尝试使用它。
执行方案时,系统优先使用当前操作用户进行权限校验;请求中没有用户时,使用原查询的提交用户;两者都缺失时,才使用系统默认用户。因此,当前操作用户或原查询用户缺少源表、视图或目标数据空间权限时,方案可能生成,但执行会失败。
限制条件速查
| 场景 | 系统行为 |
|---|---|
| 个人偏好中关闭智能加速 | 不请求或展示加速方案 |
RUNNING 耗时小于或等于阈值 |
查询运行中时继续等待;查询完成后确定不生成方案 |
| 系统表、非查询 SQL、失败或取消任务 | 不生成方案 |
| 查询任务详情或扫描路径缺失 | 无法完成候选分析 |
| SQL 中没有可支持的预计算片段 | 不生成方案 |
| 候选片段来源与实际扫描记录不一致 | 跳过该候选 |
| 已有启用投影完全覆盖需求 | 不重复推荐 |
| 用户缺少源数据或创建对象的权限 | 方案生成或执行可能失败 |
| 投影尚未构建成功 | 后续查询暂时无法使用该投影 |
| 查询与投影逻辑不等价,或使用投影的代价更高 | 即使投影可用,后续查询也可能不命中 |
为什么查询运行很久仍没有提示
建议按以下顺序检查:
- 确认「工作簿-智能加速推荐」偏好已开启。
- 确认查询的
RUNNING阶段已严格超过当前集群阈值,不要只看包含排队和计划阶段的总耗时。 - 确认查询未失败、未取消,且不是系统表或原生查询。
- 确认 SQL 中至少存在一个可支持的表扫描、过滤、字段选择、
INNER JOIN或支持的聚合片段。 - 查看相关数据对象是否已有覆盖本次需求的启用投影。已经具备合适投影时,系统不会重复推荐。
- 确认当前用户能够访问 SQL 中的所有源表、视图和目标数据空间。
如果以上条件均满足但仍无方案,请向管理员提供 SQL 查询任务 ID,以便核对查询任务详情、扫描路径和候选片段分析日志。
方案生成与后续命中的关系
智能加速方案中的“加速效果”和“加速原因”来自逻辑计划、数据来源数量、可选执行引擎和估算代价的分析,用于比较方案,不代表对实际耗时的保证。
投影构建成功后,查询是否真正命中还取决于 SQL 逻辑等价性、投影可用性、数据范围、字段覆盖、权限和代价选择。具体判断可参考物化改写原理与最佳实践。