2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11

30.1. 什麼是JIT編譯? #

即時 (JIT) 編譯是將某種形式的解釋型程式求值轉換為本地程式的過程,並在執行時進行。例如,與其使用通用的程式碼來求值特定的 SQL 謂詞(如 WHERE a.col = 3),不如生成一個特定於該表示式的函式,該函式可以由 CPU 原生執行,從而提高速度。

PostgreSQL 內建支援執行JIT編譯,當 PostgreSQL 使用 LLVM 構建時(使用 --with-llvm)。

有關更多詳細資訊,請參閱 src/backend/jit/README

30.1.1. JIT加速操作 #

目前 PostgreSQLJIT實現支援加速表示式求值和元組變形。未來還可以加速其他幾種操作。

表示式求值用於評估 WHERE 子句、目標列表、聚合和投影。可以透過為每種情況生成特定程式碼來加速它。

元組變形是將磁碟上的元組(請參閱 第 66.6.1 節)轉換為其記憶體表示的過程。透過建立特定於表佈局和要提取的列數的函式來加速它。

30.1.2. 內聯 #

PostgreSQL 非常可擴充套件,允許定義新的資料型別、函式、運算子和其他資料庫物件;請參閱 第 36 章。事實上,內建物件也是使用幾乎相同的機制實現的。這種可擴充套件性意味著存在一些開銷,例如由於函式呼叫(請參閱 第 36.3 節)。為了減少這種開銷,JIT編譯可以將小函式的正文內聯到使用它們的表示式中。這可以消除相當大一部分的開銷。

30.1.3. 最佳化 #

LLVM 支援最佳化生成的程式碼。其中一些最佳化足夠廉價,可以隨時執行,而另一些最佳化僅對執行時間更長的查詢有益。有關最佳化的更多詳細資訊,請參閱 https://llvm.org/docs/Passes.html#transform-passesJIT是隨時執行的,而另一些最佳化僅對執行時間更長的查詢有益。有關最佳化的更多詳細資訊,請參閱 https://llvm.org/docs/Passes.html#transform-passes

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用 此表格 報告文件問題。