即時 (JIT) 編譯是指將某種形式的直譯程式評估轉換為原生程式,並在執行時進行。例如,不必使用能夠評估任意 SQL 表達式的一般用途程式碼來評估特定的 SQL 謂詞,如 WHERE a.col = 3
,而是可以產生一個專用於該表達式的函數,並且可以由 CPU 原生執行,從而提高速度。
PostgreSQL 內建支援使用 LLVM 執行JIT編譯,前提是使用 --with-llvm
建置 PostgreSQL。
請參閱 src/backend/jit/README
瞭解更多詳細資訊。
目前 PostgreSQL 的JIT實作支援加速表達式評估和元組解構。未來可以加速其他幾個運算。
表達式評估用於評估 WHERE
子句、目標清單、彙總和投影。可以透過產生專用於每個案例的程式碼來加速。
元組解構是將磁碟上的元組(請參閱 章節 65.6.1)轉換為其記憶體中表示形式的過程。可以透過建立專用於資料表配置和要提取的欄位數的函數來加速。
PostgreSQL 具有高度的可擴展性,並允許定義新的資料類型、函數、運算子和其他資料庫物件;請參閱 章節 36。事實上,內建物件是使用幾乎相同的機制來實作的。這種可擴展性意味著一些開銷,例如由於函數呼叫(請參閱 章節 36.3)。為了減少這種開銷,JIT編譯可以將小型函數的主體內聯到使用它們的表達式中。這允許最佳化掉很大一部分開銷。
LLVM 支援優化產生的程式碼。一些最佳化的成本很低,可以在每次使用JIT時執行,而其他最佳化僅對長時間執行的查詢有益。請參閱 https://llvm.dev.org.tw/docs/Passes.html#transform-passes 瞭解有關最佳化的更多詳細資訊。
如果您在說明文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清之處,請使用此表格來報告說明文件問題。