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 编译的条件对
于优化整体系统性能至关重要.

