對於後端開發者或資料庫管理員而言,理解 PostgreSQL 的運作原理往往面臨巨大的認知挑戰。大多數人習慣於撰寫高層級的 SQL 查詢指令,但這些指令在資料庫內核中如何被解析、執行,以及底層記憶體與磁碟如何交互,通常被隱藏在複雜的原始碼與抽象的文檔之中。為了填補這個認知缺口,Nikolay Samokhvalov 開發了一款名為 PGSimCity 的開源教育工具,將 PostgreSQL 的叢集機制轉化為一個可互動的 3D 空間模擬城市。
根據 InfoQ 的報導,PGSimCity 的核心理念是將資料庫的內部結構對應到城市規劃的空間概念中。這不僅僅是視覺上的美化,而是一套將 PostgreSQL 18 內核邏輯空間化的抽象模型。在這個模擬城市中,客戶端連接從北方的天空進入,首先接觸到 Postmaster 主進程(負責監控與分發請求的監督者),隨後 Postmaster 會沿著後端大道分叉出多個工作進程(Worker Processes)來處理請求。
城市的核心區域則被設計為記憶體管理區,其中 shared_buffers(共享緩衝區,用於快取資料頁以減少磁碟 I/O)被呈現為一個 1024 格的中央網格,周圍環繞著 wal_buffers(預寫日誌緩衝區)、ProcArray(進程陣列)以及 Commit Log(CLOG,用於記錄交易提交狀態的日誌)。而在城市的地下挖掘區,則代表了物理儲存層,包含了 8 KB 的資料頁、B-tree 索引、Free Space Maps(FSM,用於追蹤頁面可用空間的映射表)以及 Visibility Maps(VM,用於加速掃描並跳過全空頁面的映射表)。
為了確保模擬的精確度,PGSimCity 在技術實作上將渲染層與狀態轉移層完全解耦。前端使用 three.js 進行 3D 繪製,而核心的模擬邏輯則由獨立的 TypeScript 狀態機(SimState)驅動。這種設計確保了即使瀏覽器渲染幀率波動,也不會影響內核狀態轉移的同步性。此外,該工具整合了 PGlite,這是一個將 PostgreSQL 編譯為 WebAssembly (Wasm) 的版本,讓使用者能直接在瀏覽器客戶端執行真實的記憶體內資料庫,實現即時的互動反饋。
除了展示正常運作流程,PGSimCity 最具價值的地方在於它能模擬資料庫的病理狀態,讓 SRE(網站可靠性工程師)或資料庫架構師觀察系統崩潰或效能下降的模式。例如,當使用者將 shared_buffers 刻意設定為極小的 16 MB 時,系統會觸發時鐘掃描驅逐競爭(Clock-sweep eviction races),開發者可以觀察到後端進程在讀取新資料前,必須頻繁地將髒頁(Dirty pages)寫回磁碟的混亂過程。
同樣地,若限制 work_mem(每個操作可使用的記憶體量),則能看到 Sort(排序)或 HashAggregate(雜湊聚合)等執行節點因記憶體不足而將暫存檔溢出至磁碟的 pgsql_tmp 目錄中。針對長交易(Long-running transactions)的模擬則會顯示 xmin 水平線(決定資料版本可見性的底線)被壓低,導致 autovacuum(自動清理過期資料的進程)無法回收空間,進而引發表膨脹(Table Bloat)。而高強度的寫入爆發則會觸發檢查點風暴(Checkpoint storms),導致 pg_wal 目錄被大量全頁寫入(Full-page writes)填滿。
PGSimCity 的開發過程也反映了現代軟體工程的趨勢。作者提到,最初的原型是透過大規模語言模型(LLM)的提示工程快速建構,隨後再對照 PostgreSQL REL_18_STABLE 的原始碼進行精確的手動校準。這種 AI 輔助的視覺化方法有效降低了將複雜架構轉化為直觀模型的成本,甚至激發了社群開發類似的 CHSimCity(針對 ClickHouse 資料庫)等衍生項目。
目前 PGSimCity 已在 GitHub 上以 Apache-2.0 授權開源。其未來路線圖規劃了更多進階功能,包括引入語句池(Statement-pooling)的視覺化模式,並將緩衝區環形大小模型與 PostgreSQL 18 的動態 io_combine_limit(I/O 合併限制)及 effective_io_concurrency(有效 I/O 並行度)規則對齊。此外,開發團隊計畫實作夜間變異測試(Mutation testing)門檻,以確保模擬引擎能與上游的穩定分支保持同步且具備確定性的驗證能力。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。