W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
即時(Just-In-Time,JIT)編譯是將某種形式的解釋程序計算轉變成原生程序的過程,并且這一過程是在運行時完成的。例如,與使用能夠計算任意SQL表達式的通用代碼來計算一個特定的SQL謂詞(如WHERE a.col = 3
)不同,可以產(chǎn)生一個專門針對該表達式的函數(shù)并且可以由CPU原生執(zhí)行,從而得到加速。
當使用--with-llvm
編譯PostgreSQL后,PostgreSQL內建支持用LLVM執(zhí)行JIT編譯。
進一步的細節(jié)請參考src/backend/jit/README
。
當前,PostgreSQL的JIT實現(xiàn)支持對表達式計算以及元組拆解的加速。未來可能有更多其他操作采用這種技術加速。
表達式計算被用來計算WHERE
子句、目標列表、聚集以及投影。通過為每一種情況生成專門的代碼來實現(xiàn)加速。
元組拆解是把一個磁盤上的元組(見第 68.6.1 節(jié))轉換成其在內存中表示的過程。通過創(chuàng)建一個專門針對該表布局和要被抽取的列數(shù)的函數(shù)來實現(xiàn)加速。
PostgreSQL有很好的擴展性并且允許定義新的數(shù)據(jù)類型、函數(shù)、操作符以及其他數(shù)據(jù)庫對象,見第 37 章。實際上,內建對象都使用近乎完全相同的機制來實現(xiàn)。這種可擴展性隱含了一些開銷,例如函數(shù)調用帶來的開銷(見第 37.3 節(jié))。為了降低這類開銷,JIT編譯可以把小函數(shù)的函數(shù)體內聯(lián)到使用它們的表達式中。這種方式可以優(yōu)化掉可觀的開銷。
LLVM支持對生成的代碼進行優(yōu)化。一些優(yōu)化代價很低,以至于可以在每次使用JIT時都執(zhí)行,而另一些優(yōu)化則只有在運行時間較長的查詢中才能獲益。更多有關優(yōu)化的細節(jié)請參考https://llvm.org/docs/Passes.html#transform-passes。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: