30.1. Что такое компиляция JIT?#

30.1. Что такое компиляция JIT?

30.1. Что такое компиляция JIT? #

Just-in-Time (JIT) компиляция - это процесс преобразования интерпретируемой программы в нативную программу и выполнение этого процесса во время выполнения. Например, вместо использования универсального кода, который может вычислять произвольные SQL-выражения для вычисления определенного SQL-предиката, такого как WHERE a.col = 3 = 3, можно сгенерировать функцию, специфичную для этого выражения, которая может выполняться нативно процессором, что приводит к увеличению скорости выполнения.

Tantor BE имеет встроенную поддержку выполнения компиляции JIT с использованием LLVM при

См. src/backend/jit/README для получения дополнительной информации.

30.1.1. JIT Ускоренные операции #

В настоящее время реализация Tantor BE JIT имеет поддержку ускорения вычисления выражений и деформации кортежей. В будущем могут быть ускорены и другие операции.

Вычисление выражений используется для вычисления предложений WHERE, списков целей, агрегатов и проекций. Это может быть ускорено путем генерации кода, специфичного для каждого случая.

Деформация кортежа - это процесс преобразования кортежа на диске (см. Раздел 70.6.1) в его представление в памяти. Его можно ускорить, создав функцию, специфичную для макета таблицы и количества извлекаемых столбцов.

30.1.2. Встраивание #

Tantor BE очень расширяемая система и позволяет определять новые типы данных, функции, операторы и другие объекты базы данных; см. Глава 35. Фактически, встроенные объекты реализованы с использованием практически тех же механизмов. Эта расширяемость подразумевает некоторые издержки, например, из-за вызовов функций (см. Раздел 35.3). Чтобы снизить эти издержки, компиляция JIT может встраивать тела маленьких функций в выражения, использующие их. Это позволяет оптимизировать значительную часть издержек.

30.1.3. Оптимизация #

LLVM имеет поддержку оптимизации сгенерированного кода. Некоторые из оптимизаций достаточно дешевы для выполнения при использовании JIT, в то время как другие полезны только для долгосрочных запросов. См. https://llvm.org/docs/Passes.html#transform-passes для получения более подробной информации об оптимизации.