Не LLVM единым: Исследование альтернативных методов быстрой генерации кода для компиляции запросов в PostgreSQL
https://doi.org/10.15514/ISPRAS-2025-37(6)-21
Аннотация
Идея компиляции запросов в системах управления базами данных берёт своё начало в System R, где впервые была реализована схема генерации кода, при которой небольшие фрагменты машинного кода объединялись вместе для создания специализированной подпрограммы, обрабатывающей конкретный SQL запрос. В дальнейшем подходы изменились: вместо машинного кода начали генерировать код на языке С, который затем компилировался с помощью системных компиляторов, таких как GCC, в динамические библиотеки и подгружался в процессе выполнения. Сегодня стандартом де-факто в области динамической компиляции запросов стал фреймворк LLVM. Благодаря своей модульной архитектуре он позволяет избежать дорогостоящего этапа трансляции с языка высоко уровня в промежуточное представление, обеспечивая его прямую генерацию с последующим применением машинно-независимых оптимизаций и генерации эффективного машинного кода. Однако LLVM изначально разрабатывался как оптимизирующий компилятор, и его использование может приводить к значительным накладным расходам на компиляцию – в отдельных случаях они превышают время выполнения запроса в десятки раз. Это особенно проблематично для коротких запросов с миллисекундным временем исполнения. В данной работе рассматриваются два легковесных генератора кода для архитектуры x86-64 в качестве альтернативы LLVM в СУБД PostgreSQL. Оцениваются как скорость генерации кода с использованием этих фреймворков, так и качество получаемого исполняемого кода. Приведено качественное сравнение с LLVM, анализируются компромиссы между скоростью компиляции и производительностью выполнения запросов на базах данных различного размера. Результаты экспериментов показывают, что легковесные решения не только превосходят LLVM по производительности на небольших наборах данных, но и сохраняют её конкурентноспособной на больших объёмах информации.
Об авторах
Михаил Вячеславович ПАНТИЛИМОНОВРоссия
Научный сотрудник отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ, компиляторные технологии, СУБД.
Рубен Артурович БУЧАЦКИЙ
Россия
Кандидат технических наук, научный сотрудник отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Денис Владиславович ЗАВЕДЕЕВ
Россия
Аспирант Института системного программирования им. В.П. Иванникова Российской академии наук. Сфера научных интересов: компиляторы, языковые виртуальные машины.
Список литературы
1. PostgreSQL – open Source DBMS. [Online], Available at: https://www.postgresql.org, accessed 05.05.2025.
2. G. Graefe, “Volcano - An Extensible and Parallel Query Evaluation System,” IEEE Trans. Knowl. Data Eng., vol. 6, no. 1, pp. 120-135, 1994. DOI: 10.1109/69.273032. [Online], Available at:
3. https://doi.org/10.1109/69.273032.
4. T. Neumann, “Efficiently Compiling Efficient Query Plans for Modem Hardware,” PVLDB, vol. 4, no. 9, pp. 539-550, 2011. DOI: 10.14778/2002938.2002940. [Online], Available at: http://www.vldb.org/pvldb/vol4/p539-neumann.pdf.
5. PostgreSQL mailing lists, “[GSoC] Push-based query executor discussion.” [Online], Available at: https://www.postgresql.org/message-id/87shm1zfnz.fsf%40ispras.ru, accessed 05.05.2025.
6. A. Shaikhha, M. Dashti and C. Koch, «Push vs. pull-based loop fusion in query engines», CoRR, abs/1610.09166, 2016 arXiv: 1610.09166. Available at: https://arxiv.org/abs/1610.09166.
7. PostgreSQL 10.0 Release Notes, [Online] Available at: https://www.postgresql.org/docs/release/10.0, accessed 05.05.2025.
8. GitHub, Mirror of the official PostgreSQL GIT repository, “Faster expression evaluation and targetlist projection.” Commit SHA: b8d7f053c5c2bf2a7e8734fe3327f6a8bc711755 [Online], Available at: https://github.com/postgres/postgres/commit/b8d7f053c5c2bf2a7e8734fe3327f6a8bc711755, accessed 05.05.2025.
9. PGCon 2017. A. Freund Integrating Just In Time Compilation, [Online] Available at: https://www.pgcon.org/2017/schedule/attachments/462_jit-pgcon-2017-05-25.pdf, accessed 05.05.2025.
10. The LLVM Foundation, The LLVM Compiler Infrastructure. [Online] Available at: https://llvm.org, accessed 05.05.2025.
11. PGCon 2018. A. Freund A.The State of Postgres JIT – 2018 Edition, [Online] Available at: https://anarazel.de/talks/2018-06-01-pgcon-state-of-jit/state-of-jit.pdf, accessed 05.05.2025.
12. A. Engelke and T Schwarz. 2024. Compile-Time Analysis of Compiler Frameworks for Query Compilation. In Proceedings of the 2024 IEEE/ACM International Symposium on Code Generation and Optimization (CGO '24). IEEE Press, 233–244. DOI: https://doi.org/10.1109/CGO57630.2024.10444856.
13. A. Kohn, V. Leis, T. Neumann “Adaptive Execution of Compiled Queries”, 2018 IEEE 34th International Conference on Data Engineering (ICDE), Paris, France, 2018, pp. 197-208, DOI: 10.1109/ICDE.2018.00027.
14. T. Kersten, V. Leis, T. Neumann “Tidy Tuples and Flying Start: fast compilation and fast execution of relational queries in Umbra” The VLDB Journal 30, 5 (Sep 2021), 883–905. [Online], Available at: https://doi.org/10.1007/s00778-020-00643-4.
15. Transaction Processing Performance Council, "TPC-H Benchmark." [Online]. Available at: http://www.tpc.org/tpch, accessed 05.05.2025.
16. GCC, the GNU Compiler Collection, [Online], Available at: https://gcc.gnu.org/, accessed 05.05.2025.
17. V8 JavaScript Engine, [Online], Available at: https://v8.dev/, accessed 05.05.2025.
18. OpenJDK, The HotSpot Group, [Online], Available at: https://openjdk.org/groups/hotspot/, accessed 05.05.2025.
19. DotNet, RyuJIT compiler overview, [Online], Available at: https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/jit/ryujit-overview.md, accessed 05.05.2025.
20. Parrot Virtual Machine, [Online], Available at: http://www.parrot.org/, accessed 05.05.2025.
21. MoarVM, a VM for NQP and Rakudo, [Online], Available at: https://www.moarvm.org/, accessed 05.05.2025.
22. GNU LibJIT – backend for DotGNU Portable.NET JIT engine, [Online], Available at: https://www.gnu.org/software/libjit, accessed 05.05.2025.
23. DynASM – dynamic assembler for code generation engines. [Online], Available at: https://luajit.org/dynasm.html, accessed 05.05.2025.
24. AsmJIT – lightweight library for low-latency machine code generation. [Online], Available at: https://asmjit.com, accessed 05.05.2025.
25. GNU lightning – library that generates assembly language code at run-time. [Online], Available at: https://www.gnu.org/software/lightning/, accessed 05.05.2025.
26. sljit – a low-level, platform-independent JIT compiler. [Online], Available at: https://zherczeg.github.io/sljit/, accessed 05.05.2025.
27. Xbyak – a JIT assembler for x86/x64 architectures. [Online], Available at: https://github.com/herumi/xbyak, accessed 05.05.2025.
28. M. Pall, “LuaJIT 2.0 intellectual property disclosure and research opportunities”, [Online], Available at: http://lua-users.org/lists/lua-l/2009-11/msg00089.html, accessed 05.05.2025.
29. Erlang/OTP documentation “BeamAsm, the Erlang JIT”, [Online] Available at: https://www.erlang.org/doc/apps/erts/beamasm.html, accessed 05.05.2025.
Рецензия
Для цитирования:
ПАНТИЛИМОНОВ М.В., БУЧАЦКИЙ Р.А., ЗАВЕДЕЕВ Д.В. Не LLVM единым: Исследование альтернативных методов быстрой генерации кода для компиляции запросов в PostgreSQL. Труды Института системного программирования РАН. 2025;37(6):77-92. https://doi.org/10.15514/ISPRAS-2025-37(6)-21
For citation:
PANTILIMONOV M.V., BUCHATSKIY R.A., ZAVEDEEV D.V. Beyond LLVM: Evaluating Fast Code Generation Alternatives for Query Compilation in PostgreSQL. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2025;37(6):77-92. https://doi.org/10.15514/ISPRAS-2025-37(6)-21






