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

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


                 PAYLOAD  值组成) 和一个整数型值        (记录该哈希桶中元组的数量)) 设计简化为向量结构                (通常是一个整数型数
                 组, 存储对应   R  表元组中的    PAYLOAD  值). 代理键是数据仓库和       OLAP  中普遍使用的技术, 如       TPC-H、SSB  和
                 TPC-DS  大部分表均使用了代理键作为主键. 向量连接算法可以看作是一种简化的                     NPO  算法, 向量相对于哈希表更小
                 (如在  SSB  及  TPC-H  中, 向量可以压缩到  1  字节宽度), 具有更高的    cache 局部性. 向量连接算法性能优于传统的哈
                 希连接算法    [4,5]  (也称为  array-join), 在内存效率方面优于  NPO  算法的哈希表, 也优于    PRO  算法额外的分区代价,
                 是一种内存利用率较高的         hardware-oblivious 连接算法. 因此向量连接算法也可以作为面向           OLAP  模式和负载的
                 定制化连接优化技术.

                                                        One hash table                           S
                           Shared                        per partition                   Shared
                          hash table                                                  R  vector
                                      S                                        S
                             b 1          R           r 1  h 2  h 2  s 1
                    R             h                          …       h 1,2
                        h    b 2                  h 1,2  r 2  …  …  s 2
                        …     …    …      scan  h 1,1  r 3  …  …  …  s 3    h 1,1  scan        …
                        h                         h 1,2              h 1,2
                                  h
                                                             …
                                                      r 4  h 2  h 2  s 4
                             b k
                                           pass 1  pass 2           pass 2  pass 1
                      ① build   ② probe
                                            ① partition  ② build ③ probe  ① partition
                                                                                     ① build  ② probe
                       (a) NPO 连接算法 [1]               (b) PRO 连接算法 [1]             (c) Vector Join 向量连接算法
                                      图 2 NPO  连接算法、PRO     连接算法和向量连接算法示例

                    NUMA  节点通过    QPI 连接, QPI 带宽低于本地     NUMA  带宽, 跨  NUMA  数据访问延迟是      NUMA  优化的主要
                 目标. 传统内存连接算法采用集中式设计, 在算法执行中优化                   NUMA  本地访问, 当跨    NUMA  访问延迟足够高时,
                 需要针对   NUMA   节点的  SN (shared-nothing  无共享) 微集群做表存储的分布存储优化, 静态或动态地将连接表在
                 NUMA  节点上协同分片, 提高连接操作的           NUMA  局部性. 这种轻量     NUMA SN  集群并行连接优化策略是一种存
                 储与计算一体化的优化设计, 需要在存储引擎和查询处理引擎进行协同优化.
                  1.2   CPU  架构及性能
                    CPU  架构和  NUMA   架构的差异化对连接优化设计有较大影响. 表               1  列出了  5  种代表性的 CPU   架构, 包括
                 Intel CLX、Intel ICX、AMD Zen2  和  AMD Zen3. CLX(28) 为  6  通道内存, 内存带宽低于其他    4  个  CPU  型号.
                 AMD Rome 和  Milan CPU  采用小芯片  (chiplet) 架构, 每个小芯片中集成了     8  个核心, 其中, Rome Zen2  小芯片中
                 每  4  个核心共享  16 MB L3 cache, Milan Zen3  小芯片中每  8  个核心共享  32 MB L3 cache, L3 cache 总容量均为  256
                 MB, 平均每核心    4 MB L3 cache slice. 与  AMD  架构不同, Intel x86  的两个型号  CLX(28) 和  ICX(38) 均采用  MESH
                 架构  L3 cache, 全部核心共享访问统一的        L3 cache 容量, 尽管  L3 cache 总容量低于  AMD CPU, 但核心有效     L3
                 cache 容量较  AMD  小芯片结构上的有效       L3 cache 容量更大. L3 cache 容量和缓存效率对      hardware-oblivious 的
                 NPO  算法和向量连接算法性能有较大的影响, 也间接影响了                 NUMA  优化的效果.

                                                 表 1 代表性   CPU  架构及性能

                                                      主频
                      CPU型号              类别                核心             缓存                  内存
                                                     (GHz)
                                                                64 KB L1, 512 KB L2, 64 MB L3,
                   华为鲲鹏920 7200        2代ARM v8       2.6   64                          8通道, 带宽190.7 GB/s
                                                                     2×32 MB 1 MB/核
                  Intel Xeon Gold 6258R  2代Cascade Lake (CLX)  2.7  28  32 KB L1, 1 MB L2, 38.5 MB L3  6通道, 带宽131.13 GB/s
                                                                32 KB L1, 512 KB L2, 256 MB L3,
                    AMD EPYC7742      2代Rome Zen2     2.24  64                          8通道, 带宽190.7 GB/s
                                                                    8×32 MB 16 MB/4核
                 Intel Xeon Platinum 8368  3代Ice Lake (ICX)  2.4  38  48 KB L1, 1.25 MB L2, 57 MB L3  8通道, 带宽200 GB/s
                                                                32 KB L1, 512 KB L2, 256 MB L3,
                    AMD EPYC 7763     3代Milan Zen3    2.45  64                          8通道, 带宽204.8 GB/s
                                                                    8×32 MB 32 MB/8核
   439   440   441   442   443   444   445   446   447   448   449