Creative Commons Attribution 3.0 Unported license
While database management systems (DBMSs) are highly optimized, interactions across the boundary between the programming language (PL) and the DBMS are costly, even for in-process embedded DBMSs. In this paper, we show that programs that interact with the popular embedded DBMS SQLite can be significantly optimized -- by a factor of 3.4 in our benchmarks -- by inlining across the PL / DBMS boundary. We achieved this speed-up by replacing parts of SQLite's C interpreter with RPython code and composing the resulting meta-tracing virtual machine (VM) -- called SQPyte -- with the PyPy VM. SQPyte does not compromise stand-alone SQL performance and is 2.2% faster than SQLite on the widely used TPC-H benchmark suite.
@InProceedings{bolz_et_al:LIPIcs.ECOOP.2016.4,
author = {Bolz, Carl Friedrich and Kurilova, Darya and Tratt, Laurence},
title = {{Making an Embedded DBMS JIT-friendly}},
booktitle = {30th European Conference on Object-Oriented Programming (ECOOP 2016)},
pages = {4:1--4:24},
series = {Leibniz International Proceedings in Informatics (LIPIcs)},
ISBN = {978-3-95977-014-9},
ISSN = {1868-8969},
year = {2016},
volume = {56},
editor = {Krishnamurthi, Shriram and Lerner, Benjamin S.},
publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
address = {Dagstuhl, Germany},
URL = {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2016.4},
URN = {urn:nbn:de:0030-drops-60986},
doi = {10.4230/LIPIcs.ECOOP.2016.4},
annote = {Keywords: DBMSs, JIT, performance, tracing}
}