小麦带你看postgres(代码模块结构)
生活随笔
收集整理的這篇文章主要介紹了
小麦带你看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:執行復雜的計劃包括,增刪改查。算子舉例:堆掃描、索引掃描、排序、連接、聚合、分組、去重等。
?
指令支持(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)
include:引用的文件。
lib:支持的庫,大致看了下有二插堆,布隆過濾器。
port:兼容性部分。
regex:正則表達式。
snowball:語法庫,雪球是一個語法庫,各國語言的規范都有。
replication:通過日志遷移支持流式備份。
tsearch:文本查詢庫用于支持全文查詢。
翻譯自 (https://wiki.postgresql.org/wiki/Backend_flowchart)?
轉載于:https://www.cnblogs.com/zhejiangxiaomai/p/10653693.html
總結
以上是生活随笔為你收集整理的小麦带你看postgres(代码模块结构)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试 csdnmakerdown语法
- 下一篇: Scrapy shell