舊版本放哪裡,決定了誰會膨脹

兩套資料庫都要保留資料的舊版本(MVCC 的代價),差別在把舊版本放在哪裡——而這個位置決定了「打掃房間」會不會打擾到主表。

舊版本放哪清理機制後果
PostgreSQL留在主表裡(更新=生成新資料、保留舊資料)背景程序 AutoVacuum產生大量死 Tuple;配置不當或寫入太快 → 表迅速 Bloat(膨脹) → 吃光磁碟、查詢變慢
MySQL獨立區域 Undo LogPurgeUndo Log 也要清,但不會直接導致主表結構快速膨脹,主表空間通常比較緊湊

這其實是一筆運維成本

這條差異不是效能數字,是要不要養一門手藝:

用 PG 就得會 Vacuum 調優、監控表膨脹;不想處理這些,MySQL 的帳單比較小。

這和 PG 的寫入放大來自位置過期,不是欄位變動 是同一個機制的前後段:寫入放大是當下的 I/O,膨脹是之後的帳單。

和 jsonb 那篇的關係

jsonb 能比資料模型,不能比擴展架構 已經寫過「改 jsonb 裡一個小欄位 → 整份文件重寫 → bloat 與 vacuum 壓力」。要注意那不是 jsonb 的特性,是 PG MVCC 的通性——任何常被 UPDATE 的表都會中,jsonb 只是把每次重寫的量放大。