更新时间:2024-09-06 GMT+08:00

功能介绍

什么是算子下推(NDP)

NDP(Near Data Processing)是云数据库GaussDB(for MySQL)发布的旨在提高数据查询效率的计算下推的解决方案。针对数据密集型查询,将提取列、聚合运算、条件过滤等操作从计算节点向下推送给GaussDB(for MySQL)的分布式存储层的多个节点,并行执行。通过计算下推方法,提升了并行处理能力,减少网络流量和计算节点的压力,提高了查询处理执行效率。

工作原理

云数据库GaussDB(for MySQL)采用计算与存储分离的架构,以减少网络流量为主要架构准则,通过NDP设计将该准则应用到查询操作。没有NDP之前,查询处理需要将原始数据从存储节点全部传输到计算节点。通过NDP设计,查询中的I/O密集型和CPU密集型的大部分工作被下推到存储节点完成,仅将所需列及筛选后的行或聚合后的结果值回传给计算节点,使网络流量大幅减少。同时跨存储节点并行处理,使计算节点CPU使用率下降,提升了查询效率性能。

另外,NDP框架同GaussDB(for MySQL)并行查询进行融合,并进行了页面批量预取的设计,达成执行全流程并行,进一步提升查询执行效率。

图1 NDP工作原理图

使用场景

查询业务能进行下推的场景包主要包括三大类:Projection、Aggregate、Select。

  • Projection

    列裁剪,只有查询语句所需相关字段内容才会被发送到计算节点。

  • Aggregate

    典型的聚合操作包括:count、sum、avg、max、min、group by,只发送聚合结果(而不是所有元组)到查询引擎,count (*)是一个最常见的场景。

  • Select - where子句过滤

    常见的条件表达式:Compare(>=,<=,<,>,==)、Between、In、And/Or,like。

    将过滤表达式下推送到存储节点,只有满足条件的行才会发送到计算节点。

支持范围

  1. 当前支持对InnoDB表进行计算下推。
  2. 当前支持对COMPACT或DYNAMIC行格式的表进行计算下推。
  3. 当前支持对Primary Key或BTREE Index进行计算下推,HASH Index或Full-Text Index不支持计算下推。
  4. 当前只支持SELECT查询操作进行计算下推,其他DML语句不支持计算下推,INSERT INTO SELECT也不支持计算下推;SELECT 加锁查询(如 SELECT FOR SHARE/UPDATE)不支持计算下推。
  5. 表达式下推支持数值类型、日志和时间类型和部分字符串类型(CHAR, VARCHAR),支持utf8mb4, utf8字符集。
  6. 表达式下推谓词支持比较运算(<,>,=,<=,>=,!=), IN, NOT IN, LIKE, NOT LIKE, BETWEEN AND, AND/OR等操作符。

参数说明

表1 参数说明

参数名

级别

描述

ndp_mode

Global

说明:
  • 如果需要开启Global级别的NDP,请联系技术支持协助解决。
  • NDP当前处于邀请测试阶段,共10个名额!

NDP特性开关。

取值范围:off/on

默认取值:off