小麥帶你看postgres(代碼模塊結構)

初始化部分(Initialization)前端


 

bootstrap:和系統表相關。

main:傳遞參數到後臺的pg進程。

postmaster:控制pg服務開關,建立共享內存,循環等待鏈接並分配服務。

libpq:與子進程通信相關的庫。

 
查詢部分(Main Query Flow)

tcop:交警,分配請求到對應模塊如解析器、優化器、執行器和命令行功能。

parser:把sql語句轉化成查詢執行樹。

rewrite:規則和視圖支持部分。

optimizer:優化查詢路徑生成計劃。

       optimizer_path:生成全部可能的路徑,檢查錶鏈接順序,where條件限制,優化表的統計信息,對於可執行的計劃評估開銷。

      optimizer_geqo:遺傳(或者是祖傳?)查詢優化器評估的路徑對於要鏈接的表,當表的數量不多時會給很優化的結果,表太大就直接給一個通常的,能夠經過參數控制是否使用這個功能。      

      optimizer_plan:拿着「optimizer_path」的結果輸出最小開銷的路徑。

optimizer_prep:處理特殊的查詢計劃。

optimizer_util:優化支持部分。

executor執行復雜的計劃包括,增刪改查。算子舉例:堆掃描、索引掃描、排序、鏈接、聚合、分組、去重等。node

 

指令支持(Command Support)

commands:響應指令,以及簡單的功能如vacuum、create table直接在元數據(catalog)上面作了。

catalog:元數據,直接操做系統表和目錄,如索引、表、存儲過程、操做符等。

access:大量的數據訪問函數,如索引訪問、堆訪問、和事務日誌。

      access_common:通用訪問方法。

      access_gin:索引相關訪問。

      access_gist:搜索樹相關訪問。

      access_hash:哈希相關訪問方法。

      access_heap:存儲數據行。

      access_index:被索引類型使用。

      access_nbtree:Lehman和Yao的B樹管理算法。

      access_spgist:空間分片的全局特徵信息相關訪問。(GiST)

      access_transam:事務管理,如日誌讀寫。(BEGIN/ABORT/COMMIT)

nodes:關於SQL查詢的建立或者操做叫作節點,節點通常都有類型和特殊的數據結構,節點間常常被放在鏈表裏。

storage:管理大量存儲系統,提供統一後臺訪問。

      storage_buffer:共享緩存管理。

      storage_file:文件管理。

      storage_freespace:剩餘空間映射表。

      storage_ipc:信號量和共享內存。

      storage_large_object:超大對象。

      storage_lmgr:鎖管理。

      storage_page:頁管理。

      storage_smgr:磁盤和存儲設備管理。

utils:工具類。

      utils_adt:包含全部PG中內建數據類型(如bool、char、date)。

      utils_cache:由於PG支持不少隨意數據類型,後臺系統須要查詢一個系統表關於這些隨意類型時會先走這個緩存。

      utils_error:錯誤反饋,從後端反饋到前端去。

      utils_fmgr:函數管理,處理動態綁定的函數調用,和系統表中定義的函數調用。

      utils_hash:哈希函數管理,被緩存和內存管理器使用以作快速查詢動態數據存儲結構。

      utils_init:大量初始化。

      utils_mb:單字節和多字節的編碼。

      utils_misc:冗餘的東西(官方叫miscellaneous stuff)

      utils_mmgr:內存管理(PG進程本地)。

      utils_resowner:資源擁有者追溯。

      utils_sort:排序工具,如對元祖排序。

      utils_time:事務時間,與mvcc有關,判斷一個元祖是過時了仍是未提交。

基礎支持(Support Facilities)git


include:引用的文件。

lib:支持的庫,大體看了下有二插堆,布隆過濾器。

port:兼容性部分。

regex:正則表達式。

snowball:語法庫,雪球是一個語法庫,各國語言的規範都有。

replication:經過日誌遷移支持流式備份。

tsearch:文本查詢庫用於支持全文查詢。

翻譯自 (https://wiki.postgresql.org/wiki/Backend_flowchart
相關文章
相關標籤/搜索