OB作为HTAP的数据库,是如何判断一条SQL是哪一类型的呢?PPT里提到,根据SQL执行时间和资源占用率判断,此处是还没有执行,是指执行计划吗?
PPT里说的"执行时间和资源占用率"指的是优化器在生成执行计划阶段估算出来的代价(Cost) ,不是SQL真正跑完后的实际耗时。
具体机制
OB判断一条SQL走TP路径还是AP路径,发生在执行计划生成阶段,流程是这样的:
1. 优化器(CBO)生成执行计划时做代价估算
SQL进来后,优化器会基于统计信息(表统计、列直方图等)估算:
- 预估扫描行数(EST. ROWS)
- 预估CPU开销
- 预估内存开销
- I/O代价
这些全是估算值,不需要真正执行SQL就能算出来。
2. 根据估算代价选择访问路径
OB V4.3引入了行列一体化存储后,优化器会在行存路径和列存路径之间自动抉择——根据代价模型判断哪条路径更优。如果代价高(扫描量大、聚合复杂),就走列存路径+向量化引擎,这就是AP;代价低的就走行存路径,这就是TP。
3. 高代价查询自动启用并行
对于扫描代价较高的查询,优化器会自动启用 AUTO DOP(自动并行度),进一步说明这条SQL被判定为AP类型。
你可以验证
用 EXPLAIN 查看执行计划时,能看到 EST. ROWS 和 COST 列,这就是优化器的估算值。类似PolarDB-X的做法,执行计划末尾会标记 WorkloadType: TP 或 AP。
一句话总结
PPT说的"执行时间和资源占用率"准确来说是优化器基于统计信息估算的执行代价,发生在生成执行计划阶段,SQL还没真正跑。你的理解完全正确。