Page 446 - 《软件学报》2025年第12期
P. 446

韩瑞琛 等: NUMA-conscious 外键连接优化技术                                                  5827


                 LLC  缓存哈希表/向量, CPU LLC    大小及访问性能对连接性能有直接的影响. 当前               CPU  发展的一个显著趋势是持
                 续增大   LLC  大小, 如  ICX(38) 的  L3 cache 容量达到  57 MB, ARM(64) 达到  64 MB, AMD Zen2/Zen3  达到  256 MB,
                 Fujitsu A64FX  集成了  32 GB  的  HBM2  以及  Intel Sapphire Rapids 集成  64 GB HBM2  扩大缓存容量. 前期研究固定
                 的连接负载, 因而无法揭示连接性能受硬件技术发展的影响, 也无法体现在真实应用场景下连接负载的需求                                  (如通
                 过物化   (SSB) 及冗余外键   (TPC-DS) 消除大表连接代价, 真实的维表缓慢及非线性增长等).
                    本文提出的     MJB  连接基准不仅用于评估不同连接算法的性能特征, 还能够进一步揭示不同连接算法性能与
                 不同  CPU  架构之间的相关性. 随着晶体管集成度的持续提升, CPU LLC                容量增幅迅速, 连接算法因相对于不同
                 cache 层次的依赖性可能导致性能相对优势发生变化. MJB               连接基准不仅能客观全面地给出不同连接算法的性能
                 特征, 还能进一步给出连接算法性能和硬件技术的相关性, 从硬件发展的维度预测未来连接算法性能的趋势, 为数
                 据库提供更加全面的性能预测方法.
                  2   NUMA-conscious 连接算法设计

                    本节讨论    NUMA-conscious 连接算法实现技术, 在连接算法上聚焦于              NPO  算法和向量连接算法, 相对于
                 PRO  算法内存消耗更低, 而且可以更好地支持现代流水线处理和向量化处理模型, 在                        OLAP  多表连接场景的查询
                 处理中具有更大的应用价值.
                  2.1   NUMA-conscious 分区
                    NUMA  架构上理想的存储策略是将输入表均匀分布在各                  NUMA  节点之间, 本地线程访问本地          NUMA  节点
                 分区数据. 为避免     NUMA  节点内存分配的偏斜, 将       numactl 的内存分配策略设置为--interleave=all, 使操作系统在
                 各  NUMA  节点之间采用轮询均匀分配内存. 这种分配策略适用于                 NUMA-oblivious 算法, 在  NUMA-conscious 算
                 法中可能存在线程跨       NUMA  节点的内存访问延迟.
                    NUMA-conscious 分区需要磁盘-内存一体化设计策略, 来保证表数据加载到内存时在                     NUMA  节点间均匀分
                 布. 图  3  显示了该分区策略, 原始表为行存储结构, 加载到内存转换为列存储结构, 即将行存储表划分为固定记录
                 行数的行组    (row group) 并将行组转换为列存储结构, 不同的连接场景需要不同的                NUMA  分区策略.


                                  Rows to load  Row-group chunks  Radix-group chunks  NUMA nodes
                                                     PK-FK PK-FK












                                      ...         ...             ...
                                                图 3 NUMA-conscious 分区方法

                  2.1.1    单表分区策略
                    当连接操作中      R  表很小而  S  表很大时, 可以采用简单的跨       NUMA  共享哈希表或共享向量连接算法, 此时仅需
                 要将  S  表在  NUMA  节点间均匀分布, 最大化利用内存带宽性能. 这种           NUMA  分区场景适用于典型数据仓库和           OLAP
                 应用中的星形模型, 如       SSB  和  TPC-DS  中单一庞大的事实表和多个较小的维表模式. 在数据加载阶段, 事实表数
                 据以列结构行组为粒度均匀分布在            NUMA  节点间, 同一    NUMA  节点的   CPU  线程访问行组列数据分片, 最大化         S
                 表扫描的   NUMA  局部性. 基于单表分区策略的跨          NUMA  共享哈希表或共享向量连接算法见算法              1.
   441   442   443   444   445   446   447   448   449   450   451