Page 461 - 《软件学报》2025年第12期
P. 461
5842 软件学报 2025 年第 36 卷第 12 期
4.4 NUMA SN 集群连接性能
NUMA SN 集群连接算法提供了两个 NPO 算法和一个向量连接算法的实现技术, 采用动态数据分布技术提
高 NUMA 访问局部性. 当与 NUMA-aware 存储技术相结合时, 采用静态 NUMA 分区技术可以消除查询的数据分
区代价, 进一步提高连接性能收益.
如图 10 所示, PSNNPO 算法将 R 表和 S 表在 NUMA 节点间按连接键值分区存储以提高连接操作的 NUMA
数据访问局部性. 当 R 表较小时, PSNNPO 算法性能低于 NPO --basic-numa 算法. 当 R 表较大时, PSNNPO 算法可
以有效地消除跨 NUMA 访问延迟, 性能优于 NPO --basic-numa 算法. 两个算法性能曲线的交汇点由 L3 cache 的
效率决定, 即当哈希表有较高 cache 局部性时, NPO --basic-numa 算法性能优于 PSNNPO 算法, 反之则 PSNNPO
算法优于 NPO --basic-numa 算法. 在性能曲线交汇点的横坐标上 ARM(64)<Rome Zen2<Milan Zen3<CLX(28)<
ICX(38), 反映了各 CPU L3 cache 的有效容量的特征. RRNPO 算法将 R 表复制到各 NUMA 节点, 实现 NUMA 本
地化的连接操作. 全复制策略消除了 S 表分区代价但增加了 R 表冗余存储代价, 相对 PSNNPO 算法而言也增加了
27
连接探测代价. 从性能曲线特征来看, RRNPO 算法性能仅在最大表连接时 (ARM (64) 平台|R|>2 , CLX (28) 平台,
28
ICX (38) 平台, Rome Zen2 和 Milan Zen 平台|R|>2 ) 性能低于 NPO --basic-numa 算法. 此时, 相同 CPU 系统中 3
代 CPU 与 2 代 CPU 性能差距更小, 其主要原因在于全复制策略增强了哈希表探测的 NUMA 内存访问局部性, 并
且仅能通过本地 NUMA 节点的 cache 访问完整的 R 表的哈希表, NPO --basic-numa 算法的哈希表更小 (1/|NUMA
节点数量|×|R 哈希表|) 且可以利用多个 NUMA 节点的 cache.
图 11 显示了基于 NUMA 分区的向量连接算法 PSNVJ 算法和 Vector Join --basic-numa 基准算法的性能对比
曲线图. 在 Intel 的 CLX(28) 和 ICX(38) 平台上, PSNVJ 算法的性能几乎均低于 Vector Join --basic-numa, 数据分区
代价抵消了 NUMA 本地向量连接性能的收益. 在 ARM(64), Rome Zen2 和 Milan Zen3 平台上, PSNVJ 算法和
Vector Join --basic-numa 算法有相似的性能特征, PSNVJ 算法在 R 表较小和较大时性能均低于 Vector Join --basic-
numa 算法, 在 R 表范围较大的区间内性能低于 Vector Join --basic-numa, 如在 ARM(64) 平台上 PSNVJ 算法的性
29
28
22
21
能优势区间为 2 <|R|<2 , 在 Rome Zen2 的性能优势区间为 2 <|R|<2 , 在 Milan Zen3 的性能优势区间为
23
29
2 <|R|<2 . 当 R 表向量大小超过 L3 cache 时 (Rome Zen2 片上 L3 cache 大小为 16 MB, Milan Zen3 片上 L3 cache
大小为 32 MB, 向量宽度为 4 B), Vector Join 算法失去 cache 局部性, 会产生跨 NUMA 内存访问延迟, 向量探测时
间高于 PSNVJ 算法. 当 R 表足够大时, PSNVJ 算法需要在 NUMA 本地访问完整的连接向量, 而 Vector Join 算法
在各 NUMA 节点中访问 1/|NUMA 节点|×|连接向量|大小的向量, cache 访问效率逐渐提升, 连接性能逐渐优于
PSNVJ 算法.
5
NUMA SN 集群连接算法的动态数据分区代价较高. 如在 ICX(38) 平台上最小连接负载|R|=2 和最大连接负
29
载|R|=2 时, 分区时间在连接总时间中占比为 82.5% 和 26.2%. PSNVJ 算法执行时间为 Vector Join --basic-numa
执行时间的 5.65 倍和 1.21 倍. 当采用静态 NUMA 数据预分区策略时, PSNVJ 算法消除动态分区代价后, 其执行
时间为 Vector Join --basic-numa 执行时间的 0.99 倍和 0.89 倍, 静态分区策略的性能收益不显著. 存储引擎中的静
态分区策略适合两个大表连接场景, 如 TPC-DS 基准中 store_sales 和 store_returns 双事实表按连接键进行 NUMA
分区存储. 当数据库中存在多个具有连接关系的大表时, 如 TPC-H 中 lineitem 表, orders 表和 partsupp 表, 多维
NUMA 连接分区的存储和计算代价较高, 具有一定的局限性.
综上所述, 当跨 NUMA 访问延迟较高时, 可以将 NUMA 节点看作轻量 SN 集群, 通过典型的全复制或分区复
制策略提高 NUMA 节点内访问的数据局部性. 但连接表在 NUMA 节点上的协同分区需要一定的存储和数据预处
理代价, 当 CPU 的 NUMA 延迟性能提升 (如 ICX(38) 跨 NUMA 延迟较低) 及连接算法性能提升 (如向量连接
cache 效率较高) 时, NUMA SN 集群并行连接算法的性能收益降低, 硬件及软件性能的提升降低了复杂优化技术
的必要性.
4.5 NUMA 合并策略连接性能
NUMA 合并策略连接算法是面向 ARM 片上多 NUMA 节点所定制的优化策略. 由于片上 NUMA 间访问延

