Сборники трудов ИСП РАН


Динамическая компиляция SQL-запросов для СУБД PostgreSQL

Р.А. Бучацкий (ИСП РАН, Москва, Россия)
Е.Ю. Шарыгин (ИСП РАН, Москва, Россия, МГУ, Москва, Россия)
Л.В. Скворцов (МГУ, Москва, Россия)
Р.А. Жуйков (ИСП РАН, Москва, Россия)
Д.М. Мельник (ИСП РАН, Москва, Россия)
Р.В. Баев (МФТИ, Долгопрудный, Россия)

Аннотация

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

Ключевые слова

динамическая компиляция, JIT-компиляция, СУБД, PostgreSQL, LLVM, языки запросов

Издание

Труды Института системного программирования РАН, том 28, вып. 6, 2016, стр. 37-48.

ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).

DOI: 10.15514/ISPRAS-2016-28(6)-3

Полный текст статьи в формате pdf Вернуться к содержанию тома