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) 计算, 并最终趋近于该值:

