支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11

30.1. 什麼是JIT編譯? #

即時 (JIT) 編譯是指將某種形式的直譯程式評估轉換為原生程式,並在執行時進行。例如,不必使用能夠評估任意 SQL 表達式的一般用途程式碼來評估特定的 SQL 謂詞,如 WHERE a.col = 3,而是可以產生一個專用於該表達式的函數,並且可以由 CPU 原生執行,從而提高速度。

PostgreSQL 內建支援使用 LLVM 執行JIT編譯,前提是使用 --with-llvm 建置 PostgreSQL

請參閱 src/backend/jit/README 瞭解更多詳細資訊。

30.1.1. JIT加速運算 #

目前 PostgreSQLJIT實作支援加速表達式評估和元組解構。未來可以加速其他幾個運算。

表達式評估用於評估 WHERE 子句、目標清單、彙總和投影。可以透過產生專用於每個案例的程式碼來加速。

元組解構是將磁碟上的元組(請參閱 章節 65.6.1)轉換為其記憶體中表示形式的過程。可以透過建立專用於資料表配置和要提取的欄位數的函數來加速。

30.1.2. 內聯 #

PostgreSQL 具有高度的可擴展性,並允許定義新的資料類型、函數、運算子和其他資料庫物件;請參閱 章節 36。事實上,內建物件是使用幾乎相同的機制來實作的。這種可擴展性意味著一些開銷,例如由於函數呼叫(請參閱 章節 36.3)。為了減少這種開銷,JIT編譯可以將小型函數的主體內聯到使用它們的表達式中。這允許最佳化掉很大一部分開銷。

30.1.3. 優化 #

LLVM 支援優化產生的程式碼。一些最佳化的成本很低,可以在每次使用JIT時執行,而其他最佳化僅對長時間執行的查詢有益。請參閱 https://llvm.dev.org.tw/docs/Passes.html#transform-passes 瞭解有關最佳化的更多詳細資訊。

提交更正

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