Аннотация:В последние годы по мере увеличения производительности и роста объема
оперативной и внешней памяти производительность СУБД для некоторых классов
запросов определяется непосредственно скоростью обработки запросов процессором.
Для исполнения SQL-запросов в большинстве современных реляционных СУБД
используется модель итераторов (Volcano-модель), которая удобна в реализации в
рамках интерпретатора запросов, но сопряжена с существенными накладными
расходами при выполнении плана, например, связанными с большим количеством
ветвлений, неявными вызовами функций-обработчиков и выполнением лишних
проверок, избежать которых довольно сложно при использовании механизма
интерпретации. Одно из решений – динамическая компиляция запросов. В рамках
данной работы рассматривается метод динамической компиляции запросов с
применением альтернативной модели выполнения запроса в СУБД, что подразумевает
отказ от используемой в PostgreSQL итеративной Volcano-модели, и его реализация для
СУБД PostgreSQL с помощью компиляторной инфраструктуры LLVM. Динамический
компилятор запросов реализован в виде расширения к СУБД PostgreSQL и не требует
изменения исходного кода СУБД. Результаты проведенного тестирования показывают,
что динамическая компиляция запросов с помощью JIT-компилятора LLVM позволяет
получить ускорение в несколько раз на тестовом наборе TPC-H.