# 32.1.什么是JIT编译?

32.1.1. JIT加速操作

32.1.2. 内联

32.1.3. 优化

即时(JIT)编译是将某种形式的解释程序评估转换为本机程序并在运行时执行的过程。例如,不要使用可以计算任意SQL表达式的通用代码来计算特定的SQL谓词,比如其中a.col=3,可以生成特定于该表达式的函数,该函数可以由CPU本机执行,从而产生加速。

PostgreSQL内置支持使用LLVM (opens new window)当PostgreSQL是用--与llvm.

看见src/backend/jit/README了解更多细节。

# 32.1.1.JIT加速操作

目前PostgreSQL的JIT实现支持加速表达式计算和元组变形。未来可能会加快其他几项行动。

表达式求值用于计算哪里条款、目标清单、汇总和预测。它可以通过生成特定于每种情况的代码来加速。

元组变形是转换磁盘上元组的过程(请参见第70.6.1节)进入它的内存表示。可以通过创建一个特定于表布局和要提取的列数的函数来加速。

# 32.1.2.内联

PostgreSQL非常可扩展,允许定义新的数据类型、函数、运算符和其他数据库对象;看见第38章.事实上,内置对象是使用几乎相同的机制实现的。这种可扩展性意味着一些开销,例如由于函数调用(参见第38.3节).为了减少这种开销,JIT编译可以将小函数体内联到使用它们的表达式中。这使得很大一部分开销得以优化。

# 32.1.3.优化

LLVM支持优化生成的代码。有些优化非常便宜,可以在使用JIT时执行,而另一些优化只对运行时间较长的查询有用。看见https://llvm.org/docs/Passes.html#transform-通行证 (opens new window)有关优化的更多详细信息。