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

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


                 能提升显著增加至       148%. 相比之下, 查询   Q8  的性能提升仅为     25%. 这种差异主要源于两个查询的性能瓶颈所在
                 不同. 查询  Q1  的性能瓶颈主要集中在过滤操作上, 降低选择率使得存储引擎层能够有效地过滤大量数据, 从而显
                 著减少上传到服务层的数据量和            I/O  开销. 查询  Q8  的性能瓶颈在于连接操作. 因此, 即使降低选择率, Q8           的性能
                 提升仍然有限. 查询      Q4  的表现介于   Q1  和  Q8  之间, 进一步验证了选择率与性能提升之间的关系. Q4            的过滤条件
                 具有中等的选择率和较高的谓词表达式开销, 因此在启用                   JIT  编译结合谓词下推后, 能够实现中等程度的性能提
                 升. 此外, 查询  Q13  虽然未在本次分析中详细讨论, 但其表现类似于              Q8, 因其性能瓶颈也不在于过滤操作上, 因此
                 在启用   JIT  编译结合谓词下推后, 性能提升同样不显著.

                                                                                          Q1
                                140                                                       Q4
                              Performance improvement (%)  100
                                                                                          Q8
                                120

                                 80
                                 60
                                 40
                                 20
                                 0
                                      1    10    20   30    40    50    60   70    80    90
                                                     Predicate expression selectivity (%)
                                              图 10 查询选择率对性能提升的影响

                    综上所述, 在    JIT  编译结合谓词下推的场景中, 查询选择率与谓词表达式的开销占比共同决定了性能提升的
                 效果. 高选择率导致存储引擎层提前过滤数据的能力减弱, 性能提升主要依赖于编译执行减少的函数调用开销; 而
                 低选择率则能够充分利用谓词下推技术, 提前过滤大量数据, 显著提升查询性能.
                  5   总 结

                    本文针对传统数据库迭代器执行模型的不足, 提出并实现了一种基于                        JIT  编译的优化方案, 以提升数据库查
                 询执行性能, 特别是在处理复杂查询和大数据量的场景. 通过将                   SQL  查询中的谓词条件动态转换为机器码代替解
                 释执行, 旨在减少虚函数调用和系统上下文切换的开销, 提高条件验证效率. 此外, 日益流行的可插拔数据库系统
                 架构使得近数计算功能需求变得迫切. 本文将               JIT  编译与谓词下推结合的优化策略, 扩展了谓词下推的适用范围,
                 支持下推非索引条件, 并将        JIT  编译生成的机器码下推至存储引擎层进行提前过滤, 减少了不必要的数据传输和
                 计算开销, 进一步提升了性能. 实验结果表明, 启用             JIT  编译后, MySQL  数据库在处理大数据量和复杂查询时性能
                 显著提升, 尤其在降低      I/O  开销和优化资源利用方面.
                    未来研究将探索如何对聚合运算进行编译和下推, 并针对聚合操作的特性                         (如分组、排序) 进行优化, 以进一
                 步提升数据库性能. 其次, 我们还将探索如何实现高效的机器码缓存和复用机制, 减少重复查询场景中的编译开
                 销, 确保在频繁执行的简单查询中能够有效平衡性能和成本.

                 References
                  [1]   Padmanabhan S, Malkemus T, Jhingran A, Agarwal R. Block oriented processing of relational database operations in modern computer
                     architectures. In: Proc. of the 17th Int’l Conf. on Data Engineering. Heidelberg: IEEE, 2001. 567–574. [doi: 10.1109/ICDE.2001.914871]
                  [2]   Neumann T. Efficiently compiling efficient query plans for modern hardware. Proc. of the VLDB Endowment, 2011, 4(9): 539–550. [doi:
                     10.14778/2002938.2002940]
                  [3]   Schulze R, Schreiber T, Yatsishin I, Dahimene R, Milovidov A. ClickHouse-lightning fast analytics for everyone. Proc. of the VLDB
                     Endowment, 2024, 17(12): 3731–3744. [doi: 10.14778/3685800.3685802]
   270   271   272   273   274   275   276   277   278   279   280