TableScan)时,实例不会一次性读取所有目标列,而是先读取谓词列并完成过滤,再按过滤结果回头读取真正需要的非谓词列。Column Read 算子,将原本一次性的 TableScan 拆分为两个阶段:TableScan 内嵌的 Selection 完成过滤,输出命中行的行号集合。Column Read 算子根据命中的行号,仅回头读取并解压尚未读取的非谓词列。TopN 紧邻 TableScan 的查询形态中尝试延迟物化:先按 TopN 排序键扫描定位结果行,再仅物化最终输出所需的列数据。libra_enable_late_materialization 控制总开关,开启时为 ON。属性 | 说明 |
参数类型 | BOOL |
默认值 | ON |
取值范围 | ON:开启延迟物化; OFF:关闭延迟物化 |
作用域 | Global Session |
是否支持 SET_VAR | 支持 |
-- 在 Session 级别关闭延迟物化SET libra_enable_late_materialization = OFF;-- 在 Session 级别开启延迟物化SET libra_enable_late_materialization = ON;
参数名 | 类型 | 默认值 | 说明 |
libra_minimum_rows_to_enable_late_materialization | INT | 8192 | 表估算行数低于该阈值时不启用延迟物化 |
libra_minimum_selectivity_to_enable_late_materialization | FLOAT | 0.9 | 单个谓词的选择率必须低于该阈值才会被下推到 TableScan 用于过滤 |
libra_late_materialization_size_threshold | FLOAT | 0.5 | 估算延迟物化后读取数据量与原读取数据量的比值阈值,超过该值则放弃优化 |
libra_enable_late_materialization_trace | BOOL | OFF | 开启后会在日志中输出延迟物化的接受或拒绝原因,便于调优与排查 |
SET_VAR Hint。tiflash_fastscan 为 ON 时,延迟物化与快速扫描互斥,实例会自动关闭延迟物化并输出警告,可通过 SHOW WARNINGS 查看。libra_minimum_rows_to_enable_late_materialization 阈值(默认 8192)时,延迟物化不生效。libra_minimum_selectivity_to_enable_late_materialization 阈值(默认 0.9)时,对应谓词不会被采纳为延迟物化的过滤条件。EXPLAIN 语句可观察延迟物化是否生效。延迟物化生效时,执行计划中会出现 Column Read 算子(在简要模式下显示为 COLUMN READ),表示部分列推迟到该算子才进行物化。
SET libra_enable_late_materialization_trace = ON;
libra_enable_late_materialization 支持 SET_VAR Hint,可在单条 SQL 语句中开启或关闭延迟物化,不影响其他会话或语句。示例如下:-- 在单条 SQL 中开启延迟物化SELECT /*+ SET_VAR(libra_enable_late_materialization=ON) */ *FROM t WHERE c1 = 1 AND c2 = 1;-- 在单条 SQL 中关闭延迟物化SELECT /*+ SET_VAR(libra_enable_late_materialization=OFF) */ *FROM t WHERE c1 = 1 AND c2 = 1;
SET_VAR Hint 中的取值同时支持 ON/OFF 与 1/0 两种写法,二者等价。
文档反馈