特性描述
openGauss资源池化算子卸载特性支持Agg、SeqScan、Filter、Projection的逻辑在存储节点上运行,将过滤、投影或聚合后的结果传输到计算节点,计算节点对接收的NDP结果继续处理输出上层算子或者聚合NDP结果,业务对算子卸载无感知。此特性可以减少网络传输的数据IO,同时也可以利用存储节点的算力,提升查询的性能。本特性总体方案分为两部分:
计算侧数据库内核
- 以插件的方式提供数据库内核算子卸载功能,不能算子卸载的场景按照内核原有流程执行
- 决定适合算子卸载的场景只有收益/可以卸载的场景才进行卸载,不能算子卸载的场景按照内核原有流程执行
- 构造算子卸载的上下文信息包括snapshot、clog、csnlog、expr,表的shema等信息发送到存储侧libsmartscan进程
- 通过DSS获取文件位置对应存储单元(条带)信息,构造NDP请求发送到对应的存储节点上处理。对于不在Buffer Pool(当前读节点及写节点)中PAGE/BLOCK进行NDP处理,否则按照原有内核流程执行
- 获取存储节点NDP处理后数据的特殊处理,输出到上层算子或者汇聚中间结果
存储侧libsmartscan进程
- 提供近存储数据计算的功能
- 通过存储的接口以存储的语义读取数据,只会读取存储节点的本地数据
- 解析数据并对可见性进行判断,无法判断可见性或者无法获取对应版本数据(ustore场景)对应的PAGE/BLOCK交由计算侧原始流程处理
- 对可见的数据进行过滤、聚合、投影等操作并返回处理后的数据到计算节点
计算侧算子卸载并不会改变原有的执行计划以及算子的相关信息,通过存储引擎接口hook实现NDP数据的处理逻辑屏蔽执行引擎感知卸载的存在。 详情查看:opengauss.org 详情查看:docs-opengauss.osinfra.cn