OB作为HTAP的数据库,是如何判断一条SQL是哪一类型的呢?

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. ROWSCOST 列,这就是优化器的估算值。类似PolarDB-X的做法,执行计划末尾会标记 WorkloadType: TPAP

一句话总结

PPT说的"执行时间和资源占用率"准确来说是优化器基于统计信息估算的执行代价,发生在生成执行计划阶段,SQL还没真正跑。你的理解完全正确。

来源:OceanBase AP 概述 - 官方文档