聊聊OceanBase的向量化过滤

简介: 聊聊OceanBase的向量化过滤

聊聊OceanBase的向量化过滤为帮助客户解决HTAP 混合负载下数据查询效率难的问题,OceanBase 引入向量化技术,并完全自主设计了向量化查询引擎,极大地提高了 CPU 单核处理性能,号称实现了HTAP 场景下复杂分析查询性能的 10 倍提升我们来看下它是怎么实现过滤的。以2个字节的整型值比较为例:

指令说明:_mm256_set1_epi16:将一个162字节的整型广播成一个向量。向量大小256位也就是162字节的整数并行。_mm256_loadu_si256:从内存中加载256位整型数据,无需对齐。_mm256_cmp_epi16_mask:比较2个值,比较操作符由第3个入参指定。返回值结果类型为__mmask162个字节16位。每一位表示比较结果值。过程说明:列值通过_mm256_loadu_si256加载,比较值通过_mm256_set1_epi16广播成一个向量。通过_mm256_cm聊聊OceanBase的向量化过滤

为帮助客户解决 HTAP 混合负载下数据查询效率难的问题,OceanBase 引入向量化技术,并完全自主设计了向量化查询引擎,极大地提高了 CPU 单核处理性能,号称实现了 HTAP 场景下复杂分析查询性能的 10 倍提升。我们来看下它是怎么实现过滤的。以2个字节的整型值比较为例:

图片

指令说明:

_mm256_set1_epi16:将一个16位2字节的整型广播成一个向量。向量大小256位也就是16个2字节的整数并行。

_mm256_loadu_si256:从内存中加载256位整型数据,无需对齐。

_mm256_cmp_epi16_mask:比较2个值,比较操作符由第3个入参指定。返回值结果类型为__mmask16即2个字节16位。每一位表示比较结果值。

过程说明:

列值通过_mm256_loadu_si256加载,比较值通过_mm256_set1_epi16广播成一个向量。通过_mm256_cmp_epi16_mask对上面2个值进行比较。一次比较16个值。结果值16位,每一位表示比较结果。

也就是OceanBase 采用 bitmap 方案描述数据过滤,即每个算子都有一个 Bitmap,filter 过滤掉的数据,通过 bitmap 标识删除。当数据的选择率很低时,可能会出现 bitmap 标识的数据过于稀疏,性能不佳的情况。一些数据库通过增加整理方法,使数据稠密排列来避免上述情况。但OceanBase的HTAP 场景下 SQL 执行往往会出现阻塞算子(Sort, Hash Join, Hash Group by)或 Transmit 跨机执行算子,而这些算子本身具备数据整理让稠密输出的特点, 额外的数据整理反而会出现不必要的开销。因此 OceanBase 向量化引擎没有提供单独的方法改变 bitmap 数据排列。

参考

https://zhuanlan.zhihu.com/p/544575114

https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.htmlp_epi16_mask对上面2个值进行比较。一次比较16个值。结果值16位,每一位表示比较结果。也就是OceanBase 采用 bitmap 方案描述数据过滤,即每个算子都有一个 Bitmapfilter 过滤掉的数据,通过 bitmap 标识删除。当数据的选择率很低时,可能会出现 bitmap 标识的数据过于稀疏,性能不佳的情况。一些数据库通过增加整理方法,使数据稠密排列来避免上述情况。但OceanBaseHTAP 场景下 SQL 执行往往会出现阻塞算子(Sort, Hash Join, Hash Group by)或 Transmit 跨机执行算子,而这些算子本身具备数据整理让稠密输出的特点, 额外的数据整理反而会出现不必要的开销。因此 OceanBase 向量化引擎没有提供单独的方法改变 bitmap 数据排列。


参考


https://zhuanlan.zhihu.com/p/544575114https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html

目录
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版产品使用合集之支持将数据写入 OceanBase 数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
101 5
|
3月前
|
Apache 流计算 OceanBase
手把手教你实现 OceanBase 数据到阿里云数据库 SelectDB 内核版 Apache Doris 的便捷迁移|实用指南
本文介绍了如何将数据从 OceanBase 迁移到阿里云数据库 SelectDB 内核版 Apache Doris。提供 3 种数据同步方法 1. 使用 DataX,下载 DataX 并编写配置文件,通过 OceanBaseReader 和 DorisWriter 进行数据迁移。 2. 利用 Apache Doris 的 Catalog功 能,将 OceanBase 表映射到 Doris 并插入数据。 3. 通过Flink CDC,设置 OceanBase 环境,配置 Flink 连接器,实现实时数据同步。
手把手教你实现 OceanBase 数据到阿里云数据库 SelectDB 内核版 Apache Doris 的便捷迁移|实用指南
|
9天前
|
Oracle 架构师 分布式数据库
OceanBase数据库的发展历程是什么?
【8月更文挑战第11天】OceanBase数据库的发展历程是什么?
124 63
|
11天前
|
Oracle 关系型数据库 MySQL
OceanBase数据库简介
【8月更文挑战第9天】OceanBase数据库简介
128 60
|
7天前
|
存储 SQL 数据库
OceanBase数据库的分区策略
【8月更文挑战第13天】OceanBase数据库的分区策略
30 5
|
4天前
|
存储 SQL 算法
【OceanBase】惊天大反转!启动时真的会占用95%磁盘空间?别怕!揭秘真相+实用调整技巧,手把手教你如何优雅地管理磁盘空间,让你的数据库从此告别“吃土”模式!
【8月更文挑战第15天】OceanBase是一款高性能分布式数据库,启动时并不会默认占用95%磁盘空间,这是一种误解。其设计注重资源管理,可根据业务需求动态调整空间使用。通过设置`max_disk_usage`等参数、优化表设计、定期清理数据及启用压缩等功能,可有效控制磁盘占用,确保高效利用存储资源。
13 1
|
5天前
|
SQL 存储 数据库
OceanBase数据库优化
【8月更文挑战第14天】OceanBase数据库优化
9 2
|
12天前
|
SQL 分布式数据库 数据库
OceanBase数据库
【8月更文挑战第8天】OceanBase数据库
25 2
|
5天前
|
运维 监控 数据库
在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
【8月更文挑战第14天】在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
12 0
|
12天前
|
SQL 监控 分布式数据库
【解锁数据库监控的神秘力量!】OceanBase社区版与Zabbix的完美邂逅 —— 揭秘分布式数据库监控的终极奥秘!
【8月更文挑战第7天】随着OceanBase社区版的普及,企业广泛采用这一高性能、高可用的分布式数据库。为保障系统稳定,使用成熟的Zabbix监控工具对其进行全方位监控至关重要。本文通过实例介绍如何在Zabbix中配置监控OceanBase的方法,包括创建监控模板、添加监控项(如TPS)、设置触发器及图形展示,并提供示例脚本帮助快速上手。通过这些步骤,可以有效监控OceanBase状态,确保业务连续性。
30 0

热门文章

最新文章