Aurora PostgreSQL Serverless v2 說明書

寫給耀達 Lite 雲端進銷存的部署討論(2026-11-02)。接續 db-scaling.html、cache.html、alb.html。
前提:AWS 東京、ECS Fargate、ASP.NET Core,租戶隔離用共用資料表+RLS。價格來自 AWS 東京價目表(2026-10-29 發布),一律是美元、未稅。標示「Claude 的看法」的內容都還沒拍板。

1. 先講結論

2. 把名字拆開看

名字的部分意思
Amazon AuroraAWS 重新設計儲存層的關聯式資料庫服務。程式碼和工具用起來跟一般資料庫一樣,資料卻不是存在主機自己的硬碟上(第 3 節)。
PostgreSQL資料庫引擎的種類。AWS 寫明 Aurora PostgreSQL 相容 PostgreSQL,可以用一般驅動程式連線,也能用 pg_dump、pg_restore 搬進搬出。
Serverless不是沒有伺服器,也不是沒人用就一定不收錢,而是不用自己挑、自己換主機大小,容量由 AWS 在你設定的範圍內調整。
v2第二代。第一代(v1)架構不同,AWS 文件已標示為淘汰的產品,不要參考 v1 的資料。

查資料時會遇到的名稱差異:AWS 最新文件已經改叫「Aurora serverless」,不再寫 v2;價目表、API(ServerlessV2ScalingConfiguration)、主機類型(db.serverless)還留著舊名字。價目表裡每 ACU 每小時 0.10 美元那一筆是第一代,不要拿來試算。

用店面來比喻:傳統資料庫像是簽約租一間固定坪數的店面,生意再淡也付一樣的租金,生意變好要搬家才能換大間。Serverless 像是牆壁會動的店面,人多就自動變大,人少就縮小,按當下的坪數算錢,但你要先決定最小和最大能到多少。

3. 核心設計:運算和儲存分開

這是理解 Aurora 的關鍵。一般資料庫的資料放在主機自己的硬碟裡;Aurora 的主機只負責運算,所有資料都放在一個共用的「叢集磁碟區」。

運算層:會自動變大變小,按 ACU 計費 寫入器(Writer) 負責新增、修改,也能讀 讀取器(Reader,可選) 只能讀,最多 15 台 主機沒有自己的資料 叢集磁碟區(Cluster Volume):資料都在這裡,按實際用量計費 可用區域 A 資料副本 × 2 可用區域 B 資料副本 × 2 可用區域 C 資料副本 × 2
文件寫的是 6 個儲存節點、分散在 3 個可用區域。每區各 2 份是常見的說法,此圖為示意;帳單只算 1 份。

這樣分開帶來三個直接的好處:

4. ACU:容量的單位

ACU(Aurora Capacity Unit)代表一份約 2 GiB 的記憶體,加上相對應的 CPU 和網路。AWS 每秒量一次目前用了多少,容量可以是 1.5、3.5 這種帶小數的數字。

叢集要設定最小和最大 ACU。範圍對叢集裡的每台主機都一樣,但每台主機的容量各自變動。

ACU約略記憶體每小時(標準方案)整個月都停在這裡(730 小時)
0.51 GiB0.075 美元54.75 美元
12 GiB0.15 美元109.50 美元
24 GiB0.30 美元219.00 美元
48 GiB0.60 美元438.00 美元
816 GiB1.20 美元876.00 美元
1632 GiB2.40 美元1,752.00 美元
3264 GiB4.80 美元3,504.00 美元
384768 GiB57.60 美元42,048.00 美元

表內是單一台主機的運算費,還沒算儲存和 I/O。

可以設定的範圍

範圍Aurora PostgreSQL 版本要求
0.5~12813.6、14.3、15.2、16.1 以上
0.5~25613.13、14.10、15.5、16.1 以上
0~25613.15、14.12、15.7、16.3 以上
0~38414.23、15.18、16.14、17.10、18.4 以上,而且平台版本要是 4

東京支援到 PostgreSQL 18,平台版本 4 也有。新建的叢集會直接用最新的平台版本。

更正舊文件:db-scaling.html 與 deployment.md 原本寫 Serverless v2 最大 256 ACU(約 512 GiB),這是舊資料。現在 PostgreSQL 版本夠新時,最大是 384 ACU(約 768 GiB)。兩份文件已在 2026-11-02 更正。

5. 怎麼自動變大變小

Aurora 持續觀察每台主機的 CPU、記憶體、網路用量。不夠用就加大,用不完就縮小,每台主機各自決定。

設定的最大值 4 ACU 設定的最小值 0.5 ACU 0 時 6 時 12 時 18 時 24 時 上午開單尖峰 下午 半夜沒人:停在最小值 帳單約等於這條線下面的面積(單位是 ACU × 小時)
示意圖,不是實測。耀達 Lite 真實的曲線要等上線才知道。

店家感覺得到嗎

最小值不能只看省錢

最小值設太低的代價說明
升得比較慢從很小的容量起跳,每一步小;早上第一波尖峰可能要等一下才撐起來。
快取被清掉縮小時常用資料會被擠出記憶體,變大後要重新從儲存層讀回來,這段時間會比較慢,也會多產生 I/O 費。
連線數上限變低最小值設 0 或 0.5 時,PostgreSQL 的連線上限最多 2,000(第 9 節)。
部分功能不建議AWS 建議開 Performance Insights 時最小 2 ACU,光一台主機每月下限就是 219 美元。

最大值就是預算保險絲

整個叢集最多可能花到「主機台數 × 最大 ACU」。例如兩台主機、最大 16 ACU,全力跑一整個月的運算費上限是 3,504 美元。設太高,寫壞的查詢可能燒很多錢;設太低,主機撞頂、記憶體不夠時會一直重開。

長時間撞頂、因記憶體不足頻繁重開時,主機狀態會變成 incompatible-parameters,這段期間引擎升級等操作會被擋住。AWS 文件也提到,資料庫物件(metadata)很多會增加記憶體負擔。Claude 由此推論,共用資料表在這點上比「一家一個 schema」輕,但這沒有實測過。

6. 縮到 0:自動暫停

最小值設 0,主機閒置一段時間後就會暫停。暫停期間不收運算費,但儲存費照收。

項目行為
閒置多久才暫停可設 5 分鐘到 1 天,預設 5 分鐘
醒來要多久通常約 15 秒;暫停超過 24 小時,可能要 30 秒以上
什麼會叫醒它任何連線嘗試,就算密碼打錯也會;改設定、引擎升級、查看記錄檔也會
剛醒來時從比較小的容量開始往上升,不會回到暫停前的大小
大量連線同時擠進來部分可能失敗,程式要有重試機制
進行中的背景工作暫停時,autovacuum(資料庫的清理工作)和 pg_cron 排程會被取消,暫停期間到點的排程會直接跳過

不會暫停的情況:只要有任何使用者連線開著就不會暫停。RDS Proxy 會一直開著連線,所以有接 Proxy 的叢集永遠不會暫停。ASP.NET Core 的連線池如果留著閒置連線,一樣會擋住暫停(這點是推論,要實測)。

AWS 把這個功能定位給開發、測試區和內部系統。正式環境店家早上第一個操作要等 15 秒,體驗很差,所以只適合測試區。

7. 儲存層:資料放在哪裡

刪資料不一定讓帳單變少,這點跟租戶隔離有關

刪掉資料後空間能自動還回去的,只有 DROP TABLE、TRUNCATE TABLE、ALTER TABLE ... DROP PARTITION 這類操作,一般的 DELETE 不算。

耀達 Lite 選了共用資料表,要刪一家沒付費的店只能用 DELETE。這些空間之後可以給新資料重複使用,但帳單不會馬上下降;要真的縮小,還得事後用 pg_repack 重整資料表。這是選 A 時記下的「刪大店要分批慢慢刪」之外,新查到的代價。

兩種儲存方案

標準(Standard)I/O 最佳化(I/O-Optimized)
運算(每 ACU 每小時)0.15 美元0.20 美元
儲存(每 GB 每月)0.12 美元0.27 美元
I/O(每 100 萬次)0.24 美元不收費
適合I/O 費低於資料庫總費用 25%I/O 費達到總費用 25% 以上

I/O 是資料庫跟儲存層之間的讀寫次數。從標準換成 I/O 最佳化每 30 天可以一次;反過來隨時可以換。Serverless 的主機切換時不用停機、不用重開。所以第一版可以先選標準,看帳單再決定。

8. 寫入器、讀取器與故障接手

寫入器只有一台,負責所有新增和修改。讀取器可以加到 15 台,只能查詢。兩者的差別只在角色,它們讀的是同一份資料。

程式連線時有兩個固定的網址:叢集端點永遠指向目前的寫入器;讀取端點會分散到讀取器。主機換手時,叢集端點的網址不用改。

主機故障時會怎樣

配置故障時的動作中斷多久月費影響
只有寫入器在同一個可用區域重建主機通常不到 10 分鐘最低
寫入器+順位 0、1 的讀取器讀取器升格成寫入器通常不到 60 秒,常常不到 30 秒運算費約兩倍
只有寫入器,而且整個可用區域掛掉不會自動接手,要手動在別區建新主機看人多快處理最低

讀取器的順位決定它的行為

順位容量適合用來
0、1跟著寫入器:至少跟寫入器一樣大,接手時立刻撐得住,閒的時候也一起縮小高可用備援
2~15各自獨立,在叢集範圍內自己伸縮,可以單獨暫停跑報表、全站統計。接手時可能要先變大;最小值太低時複寫可能跟不上

讀取器有一點點延遲:文件說通常遠低於 100 毫秒,但不是零。店員剛開完銷貨單,馬上去讀取器查庫存,可能還看到舊的數字。庫存、金額、剛寫入的單據一律讀寫入器,只有報表這類能接受些微延遲的查詢才放讀取器。

讀取器不一定要第一天就開。AWS 文件說,隨時可以替現有叢集加一台其他可用區域的讀取器,轉成多可用區域配置。

整個東京區域掛掉的話要靠 Aurora Global Database(跨區域),AWS 建議此時最小 8 ACU,第一版不需要考慮。

9. 連線數與 RDS Proxy:跟 RLS 的衝突

連線數上限

上限看的是最大 ACU,不是目前容量,所以主機縮小時連線不會被切斷。它是靜態參數,改了最大 ACU 要重開主機才會更新。

最大 ACU預設連線上限(PostgreSQL,平台版本 4)
1194
4844
81,710
163,443
32 以上5,000

最小值設 0 或 0.5 時,上限最多 2,000。

RDS Proxy 想解決的問題

RDS Proxy 擋在程式和資料庫中間,讓很多程式連線共用少量資料庫連線。一筆交易結束就把連線還回去,給別人用,這叫多工(multiplexing)。它也能讓主機換手更快,AWS 寫的是故障接手時間最多減少 66%。

RLS 怎麼知道現在是哪一家店

AWS 的多租戶指引建議由程式在執行時設定一個變數,例如 app.current_tenant,RLS 規則再用 current_setting() 讀它來過濾資料。問題就出在這裡。

一般情況:三條程式連線共用一條資料庫連線 店家 A 的請求 店家 B 的請求 店家 C 的請求 RDS Proxy 1 條資料庫連線 用了 SET/set_config:每條程式連線各自釘死一條資料庫連線 店家 A 的請求 店家 B 的請求 店家 C 的請求 RDS Proxy 資料庫連線 1 資料庫連線 2 資料庫連線 3
這叫連線被「釘住」(pinning)。被釘住的連線要等程式連線斷開才會還回去,RDS Proxy 的共用效果就沒了。

文件怎麼寫

RDS Proxy 文件列出,在 Aurora PostgreSQL 上會造成釘住的操作包括:SET 指令、用 set_config 設定參數、PREPARE 等預備陳述式、暫存資料表、宣告游標、DISCARD、nextval 這類序列函式,以及文字超過 16 KB 的陳述式。PostgreSQL 也不支援用來略過釘住的過濾器。

「SET LOCAL 不會釘住」這句話,文件只寫在 MySQL 那一節;PostgreSQL 那一節沒有這個例外。交易範圍內的 set_config(..., true) 或 SET LOCAL 實際會不會釘住,文件看不出來,要實測。

可能的處理方式:

做法好處代價
甲、第一版不用 Proxy,用 Npgsql 內建連線池(Claude 的看法)少一個零件和一筆費用;容器數量不多時連線數算得出來;縮到 0 也不會被 Proxy 擋住每個容器各有一池,預設每池最多 100 條,容器變多時要把池子調小;故障接手少了 Proxy 的加速
乙、用 Proxy,先實測交易範圍的設定會不會釘住沒釘住的話可以兩邊都要:RLS 加連線共用若會釘住就白付費,每 ACU 每小時多 0.025 美元
丙、用 Proxy,把店家編號放進查詢條件,不靠變數不用 SETRLS 的規則就拿不到店家編號,等於放棄資料庫這一層保護,違反第 5 題的決定,不建議

這修正了 db-scaling.html 的說法:那份文件把 RDS Proxy 當成可以直接加上去的一招,當時沒有考慮它跟 RLS 的互動。主鍵如果用 nextval,一樣可能造成釘住,這也跟「主鍵不依賴全庫共用流水號」的方向相符。

10. 備份與還原

還原一定是建立一個新叢集,不是把舊資料蓋回原本的叢集,也沒有「只還原某一家店」的按鈕。這正是共用資料表的弱點,也是第 9 題要提對策的原因。

可用的機制是:把備份還原或複製成另一個叢集,連進去只查那家店的資料,再寫回正式資料庫。怎麼做、誰有權限、要花多久,留到第 9 題討論。

11. 費用(東京)

項目標準方案備註
運算每 ACU 每小時 0.15 美元每台主機各算,按秒計費
儲存每 GB 每月 0.12 美元按實際用量,6 份只算 1 份
I/O每 100 萬次 0.24 美元沒實測前最難估的一項
備份每 GB 每月 0.023 美元不超過叢集大小的部分免費
RDS Proxy(若使用)每 ACU 每小時 0.025 美元依底層主機的 ACU 計費

三個試算情境

以下是試算,不是報價。使用量都是假設,I/O 只是舉例,要等壓力測試或上線後才知道。一個月算 730 小時,備份假設都在免費額度內,資料傳輸費沒有算進去。

情境假設運算儲存I/O合計(每月)
測試區
最小 0,會暫停
每月使用 176 小時(8 小時 × 22 天),平均 1 ACU;資料 5 GB;I/O 200 萬次26.400.600.4827.48 美元
第一版單機
只有寫入器
每天 12 小時平均 2 ACU、12 小時 0.5 ACU;資料 50 GB;I/O 5,000 萬次136.886.0012.00154.88 美元
有備援
寫入器+順位 1 的讀取器
同上,讀取器跟著寫入器一樣大273.756.0012.00291.75 美元

如果接上 RDS Proxy,第一版單機約多 22.8 美元,有備援約多 45.6 美元。「第一版單機」的 I/O 費只佔 7.7%,遠低於 25%,所以選標準方案;同一個情境改用 I/O 最佳化會變成 196.00 美元。

12. 跟固定規格的資料庫比

Serverless 不一定比較便宜,要看平均用量。下面只比運算費(單機、全月 730 小時、隨選價):

選項規格每小時每月
Aurora Serverless 平均 0.5 ACU約 1 GiB0.075 美元54.75 美元
Aurora Serverless 平均 1 ACU約 2 GiB0.15 美元109.50 美元
Aurora Serverless 平均 2 ACU約 4 GiB0.30 美元219.00 美元
Aurora 固定規格 db.t4g.medium2 vCPU/4 GiB(可爆發)0.113 美元82.49 美元
Aurora 固定規格 db.r6g.large2 vCPU/16 GiB0.313 美元228.49 美元
RDS PostgreSQL db.t4g.micro2 vCPU/1 GiB(可爆發)0.025 美元18.25 美元
RDS PostgreSQL db.t4g.medium(雙可用區域)2 vCPU/4 GiB(可爆發)0.202 美元147.46 美元
RDS PostgreSQL db.r6g.large(雙可用區域)2 vCPU/16 GiB0.540 美元394.20 美元

Claude 的看法:這裡不是建議換方案。第 3 題選 Serverless 的理由是一個人維運、店家數未知,這點沒有變。只是「Serverless 一定省錢」這句話不成立,等有真實用量後要回來比一次。長期穩定時也可以看預留執行個體或 Savings Plans,這次沒有查。

13. 要監控什麼

表格前四項每秒計算一次,這些都可以設 CloudWatch 告警。門檻留給第 8 題「監控與告警」討論。

指標意思要注意的情況
ServerlessDatabaseCapacity目前用了幾 ACU費用直接跟它有關,看它是否真的會在半夜縮下來
ACUUtilization目前容量 ÷ 最大 ACU接近 100 表示快撞頂,要加大最大值或加讀取器
CPUUtilizationCPU 用量 ÷ 最大 ACU 的 CPU跟一般主機算法不同;接近 100 表示撞頂
FreeableMemory以最大容量來算還有多少可用記憶體接近 0 表示已經撐到最大,又快沒記憶體
DatabaseConnections目前連線數接近連線上限
VolumeBytesUsed帳單算的儲存量長期趨勢,也是分割、分片門檻的參考
主機狀態 incompatible-parameters長期撞頂、因記憶體不足頻繁重開應該立刻通知值班的人

14. 對耀達 Lite 的意義

以下都是 Claude 目前的看法,還沒討論,分別屬於第 7、8、9 題。列在這裡是讓這些設定值有個可以討論的起點。

階段配置運算費下限(每月)理由
開發、測試區單台,最小 0,暫停 5 分鐘0 美元沒人用不付運算費;等 15 秒可以接受
開放試用、還沒有付費店家單台寫入器,最小 1、最大 16109.50 美元不暫停,店家不用等;故障不到 10 分鐘可接受
開始有付費店家加一台順位 1 的讀取器,放在另一個可用區域219.00 美元故障約 1 分鐘內自動接手,半夜不用人起來處理;一區掛掉也不會全停

15. 還沒查證的事

16. 名詞對照

名詞白話
叢集(Cluster)一組主機加上共用的資料
寫入器(Writer)唯一能改資料的主機
讀取器(Reader/Aurora Replica)只能查詢的主機,也是故障時的接班人
ACU容量單位,約 2 GiB 記憶體加相對應的 CPU
固定規格(Provisioned)事先選好主機大小,不會自動變動
自動暫停(Auto-pause)閒置後縮到 0 ACU,不收運算費
緩衝快取(Buffer cache)放在記憶體裡的常用資料,縮小時會被清掉一部分
故障接手(Failover)寫入器壞掉時,換另一台當寫入器
順位(Promotion tier)0 到 15,數字越小越優先接手
可用區域(Availability Zone,AZ)同一個地區裡彼此獨立的機房群
釘住(Pinning)程式連線綁死一條資料庫連線,無法共用
RLS(Row-Level Security)由資料庫依規則過濾每一列,每家店只看得到自己的資料
時間點還原(PITR)把資料還原到保留期內某個時刻,會建立新叢集
複製(Clone)快速建立一份共用底層資料的新叢集,改動時才分開存

17. 來源

都在 2026-11-02 查閱。價格來自 AWS 價目表 API,東京區域,發布日期 2026-10-29。