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

1234                                                       软件学报  2026  年第  37  卷第  3  期


                                                              t J (N)−t E (N)
                                                  Improvement =                                       (1)
                                                                t E (N)

                    16                                          16
                         MySQL                         30            MySQL
                    14                           24.48          14                           35.69  40
                         MySQL+JIT     18.56  22.23    20       12   MySQL+JIT     28.66  32.23    30
                    12
                   Execution time (s)  10 8 6  2.25  5.32  10 Reduction in execution time (%)  Execution time (s)  10 8 6  4.48  10.20  20 Reduction in execution time (%)
                                                                                                   10
                                                       0
                       −6.38
                     4
                                                       −10      4  −3.52                           0
                     2                                          2                                  −10
                     0                                          0
                         10   50   100  400  800  1 600             10   50   100  400  800  1 600
                                   Data amount                                Data amount
                                  (a) INT 类型                                 (b) DATE 类型
                    16                                         16                                  15
                         MySQL                   10.92  15           MySQL                    8.84
                    14                                         14
                         MySQL+JIT     4.59  8.83      10      12    MySQL+JIT     2.51  6.88      10
                   Execution time (s)  10 8 6  −8.28  −3.41  1.27  5 0 −5 Reduction in execution time (%)  Execution time (s)  10 8 6  −9.83  −4.42  0.23  0 −5 Reduction in execution time (%)
                    12
                                                                                                   5



                                                                                                   −15
                     2 4                               −10      4 2                                −10
                                                       −15
                     0                                          0
                         10   50   100  400  800  1 600              10   50  100   400  800  1 600
                                   Data amount                                Data amount
                                (c) DECIMAL 类型                              (d) VARCHAR类型
                                                图 4 Microbench  基准测试结果

                    对于不同的数据类型, 启用         JIT  编译系统后执行时间减少的幅度各不相同. 实验结果显示, 在                 1 600  万数据量
                 场景下, DATE   类型减幅最显著      (35.69%), 其次是  INT  类型  (24.48%), DECIMAL  和  VARCHAR  类型则相对较小
                 (分别为  10.92%  和  8.84%). 对于  DECIMAL  和  VARCHAR  类型, 由于工作量较大, 本研究仅编译了调用栈底层的
                 若干关键函数. 当使用       JIT  编译执行时, 仍有部分函数需要通过         MySQL  的  API 调用来处理, 限制了    JIT  编译对这
                 两类数据类型的性能提升. 因此, DECIMAL           和  VARCHAR  类型在启用    JIT  编译后, 执行时间减幅相对有限. 而
                 DATE  类型优化效果突出的原因在于其解释执行过程比                INT  类型更复杂, 需调用    Field_newdate::get_date_internal()
                 进行逐层解析: 从存储引擎读取的日期值以              3  字节压缩格式存放, 再通过位掩码和移位操作将日期值拆分为年、
                 月、日, 最后将结果打包为整数, 这一过程涉及多次虚函数调用. JIT                  编译的优化策略主要为通过函数内联和指令
                 融合, 将分散的操作合并为高效指令序列, 消除了虚函数调用开销. INT                   类型的解释执行主要通过         val_int() 获取值
                 并直接比较. JIT   优化主要体现在内联        compare_int_unsigned() 及相关函数, 将比较逻辑直接编译为硬件指令. 由
                 于  INT  操作本身已接近硬件效率, 其优化空间小于           DATE  类型. 因此, 在查询复杂度相同的情况下, DATE           类型解
                 释执行与编译执行之间的时间差距也更大. 根据公式                (1) 可知, 这意味着  DATE  类型的执行时间减幅将显著大于          INT
                 类型.
                    综上所述, JIT  编译系统在不同数据类型和不同数据量下的性能提升效果存在显著差异. JIT                         编译在处理大规
                 模数据和复杂查询时能够显著减少执行时间, 但在处理小规模数据时, 由于编译开销较高, 可能导致执行时间增
                 加. 同时, DATE  类型由于其复杂的求值过程和较高的函数调用开销, 受益最大; INT                      类型次之; DECIMAL    和
                 VARCHAR  类型由于部分函数仍需通过          API 调用, 执行时间减幅较为有限. 因此, 合理选择启用             JIT  编译的条件对
                 于优化整体系统性能至关重要.
   266   267   268   269   270   271   272   273   274   275   276