Page 270 - 《软件学报》2026年第3期
P. 270

袁巩生 等: JIT  编译技术在可插拔存储引擎数据库中的应用                                                 1233


                 混合编译情况下      MySQLJ 的性能表现. 最后, 使用 TPC-H 数据集, 测试不同查询命中率以及是否启用下推这两种
                 场景下   MySQLJ 的性能表现, 并对以上实验结果进行评估与分析.
                  4.1   实验环境
                    为了确保实验结果的客观性与准确性, 所有实验均在同一集群环境下进行. 集群的软硬件环境如表                               1  所示.

                                              表 1 实验测试集群软硬件环境配置

                                  类别                                 参数
                                  CPU           Intel® Xeon® Gold 6240R CPU @ 2.40 GHz 16物理核心, 16逻辑核心
                                  内存                              64 GB DRAM
                                 操作系统                           Ubuntu 20.04.6 LTS
                                MySQL版本                           MySQL 8.0.31
                                 测试工具                             sysbench 1.0.17
                                  TPC-H                            TPC-H 3.0.1

                  4.2   单表查询测试
                    本节通过    Microbench  基准测试展示单表查询场景下启用           JIT  编译系统前后的性能表现. 表       2  列出了用于测
                 试的查询示例     (以  INT  类型为例), 其余数据类型的测试均基于相同的           SQL  查询模板进行.

                                            表 2 Microbench  基准测试查询示例     (INT)

                                           类型                        查询
                                                       SELECT a, b
                                                       FROM test
                                                       WHERE (a > [int] AND a < [int])
                                         不含主键          AND (b > [int] AND b < [int])
                                                       AND (a != b);
                                                       SELECT a, b
                                                       FROM test
                                                       WHERE (id > [int] AND id <[int])
                                                       AND (a > [int] and a < [int])
                                         含有主键
                                                       AND (b > [int] and b < [int])
                                                       AND (a != b);

                  4.2.1    数据量与数据类型对   JIT  编译的影响
                    本节旨在展示不同数据量和数据类型对                 JIT  编译系统的影响. 测试涵盖        INT、DECIMAL、DATE      和
                 VARCHAR  这  4  种数据类型, 查询数据量分别为        10  万、50  万、100  万、400  万、800  万和  1 600  万, 使用表  2  中
                 不含主键的    SQL  查询.
                    实验结果表明, JIT    编译在小数据量场景下可能导致性能下降. 如图                4  所示, 当数据量为   10  万时, 各个数据类
                 型在使用   JIT  编译后执行时间下降      3%–9%  不等. 这是由于在小数据量场景下查询整体的执行时间较短, 而编译时
                 间占总查询时间的比例较大, 导致边际效益为负, 无法满足第                  3.1.2  节所述的  t C  + t E (N) < t J (N). 因此, 在此情况下启
                 用  JIT  编译后, 执行时间反而有所增加. 当数据量增加到           50  万时, INT  类型和  DATE  类型在启用  JIT  编译后, 相较
                 于解释执行, 执行时间略有减少, 而          DECIMAL  类型和   VARCHAR  类型的测试结果则几乎与解释执行的结果持
                 平. 随着数据量的增长, 执行时间显著降低. 数据量达到                 1 600  万时, INT  类型的执行时间通过     JIT  编译降低了
                 24.48%, DATE  类型降低  35.69%, 而  DECIMAL  和  VARCHAR  类型分别降低约   10%, 这一结果验证了     JIT  编译的
                 有效性. 然而, 随着数据量进一步增加, 执行时间的减幅呈递减趋势. 例如, INT                  类型从   100  万增至  400  万时执行时
                 间减少   13.24%, 而从  800  万增至  1 600  万仅减少  2.25%. 这表明数据量扩大导致编译时间在总查询时间中占比减
                 少, 边际效益降低, 最终趋于饱和. 此时, 执行时间的减少比例可按公式                  (1) 计算, 并最终趋近于该值:
   265   266   267   268   269   270   271   272   273   274   275