《PostgreSQL 14 Internals》拆解 PostgreSQL 的內部運作,從資料在磁碟上的組織方式一路談到查詢規劃與各類索引的實作。全書共七篇,由下而上層層堆疊:前面幾篇建立的詞彙與機制,是後面幾篇的前提。
全書導覽#
- 關於本書——本書寫給誰、不提供什麼、如何閱讀,以及範例所用的 demo 資料庫與版本慣例。
- 導論——資料組織(叢集、關聯、分支、頁面、TOAST)、多行程架構與共享記憶體、客戶端與主從協定。建立後續所有敘事共用的基本詞彙。
- 隔離與 MVCC——隔離級別與各種異常、元組的實體佈局與
xmin/xmax、快照與可見性判定,以及維護多版本所必需的頁面修剪、HOT 更新、vacuum、凍結與表/索引重建。 - 緩衝快取與 WAL——共享緩衝區的驅逐策略與環形緩衝、預寫式日誌如何保證崩潰後的一致性、檢查點與各種 WAL 模式的取捨。
- 鎖——關聯層級鎖與其相容性矩陣、行層級鎖的四種模式、死結偵測,以及作用於記憶體結構上的自旋鎖、輕量鎖與緩衝區釘選。
- 查詢執行——從解析到執行的各階段、規劃器所依賴的統計資訊、表與索引的存取方法與掃描方式,以及巢狀迴圈、雜湊、排序與合併這三大連接策略的成本模型。
- 索引種類——可擴充性與運算子類別這條核心邊界,以及 Hash、B-tree、GiST、SP-GiST、GIN、BRIN 六種存取方法各自的結構、演算法與適用場景。
- 結語——作者對「如何繼續探索這套系統」的建議。
怎麼讀#
全書貫穿的一項主張是:不要把任何說法(包括本書與官方文件)視為理所當然。作者反覆示範如何用
pageinspect、pg_stat_*、EXPLAIN等內建工具親手驗證每一項機制——這套「探索系統的方法」,比書中任何一項具體事實都更耐久。
書中的實驗多以 PostgreSQL 官方 demo 資料庫(航班訂票資料)為例。標註某項行為自哪個版本起可用時,指的是該功能實際進入 PostgreSQL 的版本,內容整體則對齊 PostgreSQL 14。