先把三塊占用加總
兩檔都是 AMD EPYC 7543P,32 核 / 64 執行緒,2.8–3.7 GHz。128GB 月租 $449,256GB 月租 $599。 記憶體都是 DDR4-3200 ECC RDIMM。下單時選定,之後不能再加記憶體。 主庫和快取要不要放在同一台,得在付款前算完,因為事後沒有第三檔可以升。
同一台機器上,記憶體至少被三塊東西分走。第一塊是作業系統、頁面快取和連線本身,也包括你用 SSH 進來之後的管理行程。
第二塊是資料庫想常駐的熱資料:MySQL 裡主要是 InnoDB 緩衝池;PostgreSQL 裡是 shared_buffers,再加上作業系統替它留下的頁面快取。
第三塊是 Redis 或其他快取的 maxmemory。應用程式如果也跑在這台機器上,還要再減掉它的常駐記憶體。
這三塊加總,再留出餘裕,才能跟 128 或 256 比。不要用磁碟上的庫容量直接當記憶體需求。 庫檔有 400GB,經常被查詢的熱資料可能只有幾十 GB。反過來,磁碟不大、但快取要把大半個物件集放進記憶體時,128GB 會先不夠。 看的是熱資料集和快取目標,不是資料目錄的總大小。
ECC 兩檔都有,核心數也相同。多付的每月 $150 只買到記憶體。選 256GB 解決不了「核不夠」,選 128GB 也省不下 CPU。
這篇按 Linux 上的 MySQL、PostgreSQL 和 Redis 來算。選了 Windows Server 之後,SQL Server 的記憶體上限要另算,不要把下面的緩衝池比例直接抄進 Windows。 Linux 用 SSH 連上去改設定。兩檔的連線方式相同,不因為記憶體更大就換成另一套登入方法。
什麼情況下 128GB 夠用
128GB 夠用,指的是下面幾件事同時成立。熱資料用緩衝池罩得住,命中率已經穩定。 Redis 只放工作階段、熱點鍵或一個可控的物件快取,目標大約在 8GB 到 24GB,淘汰在你可接受的範圍內。 作業系統、連線,以及同機的應用程式,加起來還能留下大約 16GB 到 24GB。接下來半年,熱資料不會翻倍,也沒有第二套大記憶體服務要搬上來。
可以把它想成一張粗算,不是這台機器的容量承諾。128GB 裡先留約 20GB 給系統和連線。 Redis 若計畫 16GB,剩下約 90GB 給資料庫。MySQL 的緩衝池可以先落在 64GB 到 80GB,給頁面快取和暫存排序留縫。 Redis 只有幾 GB 時,緩衝池可以再靠近 80GB。Redis 已經要 24GB 時,緩衝池就不要再往 80GB 以上推。
PostgreSQL 往往把 shared_buffers 設得比 MySQL 緩衝池更低,常見起點是實體記憶體的四分之一上下,其餘交給作業系統頁面快取。
同樣的熱資料,有時更適合留在 128GB 這一檔。前提是並行排序和雜湊聚合不要把 work_mem 乘出很大的峰值。
一個查詢裡可以有多個排序節點,再乘上同時在跑的查詢數。64MB 乘幾十個並行,通常還在餘裕裡;把 work_mem 開到幾百 MB,再疊上上百個並行,128GB 的空檔會被吃掉。
什麼情況下選 256GB
出現下面任意一條,就直接看 256GB。你希望緩衝池本身就在 80GB 上下,同時還要一個幾十 GB 的 Redis。
目前機器上,資料庫行程加快取行程的常駐記憶體已經靠近或超過 90GB。
PostgreSQL 上並行排序很多,work_mem 乘上並行之後會把餘裕頂滿。
除了主庫和 Redis,還要在同一台放搜尋引擎,或另一套會占堆積記憶體的服務。應用程式和資料庫沒有拆開,應用程式本身就要十幾 GB。
256GB 的粗算同樣先留 24GB 到 32GB 給系統和連線。Redis 若要 32GB 到 48GB,緩衝池仍可以落在 120GB 到 160GB。 這是起點。上線後看命中率、暫存檔和 Redis 淘汰次數,再把上限收回來。 不要把實體記憶體的百分之九十劃給緩衝池,又在同一台跑一個大 Redis。兩邊一起膨脹時,系統開始置換,查詢會比「沒進緩衝池、改去讀碟」更難查。
兩檔差價是每月 $150。季繳是 $1,347 對 $1,797,半年繳是 $2,694 對 $3,594,年繳是 $5,388 對 $7,188。 週期只乘月數,不因為選了 256GB 就打折。記憶體不夠時再搬一次庫,通常比這 $150 更貴。 現有占用已經貼近 128GB 的水位,就在下單時選 256GB。熱資料集中、命中率高、快取仍是 8–24GB,就留在 128GB。
用你自己的數對一下
把現網或上一台機器上量到的數填進表裡。對上右欄任意一列,就按 256GB 準備;五列都落在左欄,128GB 就夠做這次下單。
| 你現在能量到的 | 更靠近 128GB | 更靠近 256GB |
|---|---|---|
| 熱資料 | 緩衝池罩得住,命中率穩定 | 熱資料本身接近或超過 100GB |
| Redis / 快取 | 8–24GB 的熱鍵或工作階段 | 還要幾十 GB,並且緩衝池也大 |
| 連線和排序 | 連線數可控,很少因排序落碟 | work_mem 乘並行會頂滿餘裕 |
| 同機還有誰 | 主要是主庫和這一套快取 | 還有應用程式、搜尋或第二套記憶體服務 |
| 接下來半年 | 熱資料不會翻倍 | 現有占用已經靠近 90GB |
命中率高、淘汰可接受、熱資料集中,留在 128GB。正在靠磁碟補記憶體,或者 Redis 正在扔掉你還需要的鍵,選 256GB。 拿不準時,用上一台機器的常駐記憶體乘 1.3 做成長餘裕,再跟 128 和 256 比。乘完仍低於約 100GB,128GB 這一檔放得下這次計畫;乘完已經超過 100GB,選 256GB。
裝好之後把上限寫死
記憶體檔選定之後,還要把資料庫和快取的上限寫進設定。不寫上限,InnoDB 和 Redis 會按各自的預設去搶同一塊實體記憶體。
-
1
先寫下三個數
資料庫行程常駐、Redis 的
used_memory、系統可用記憶體。MySQL 看緩衝池讀命中,Redis 看used_memory和evicted_keys,PostgreSQL 看快取命中和暫存檔。 -
2
緩衝池和 maxmemory 分開封頂
同一台上,不要讓 InnoDB 緩衝池超過實體記憶體的大約六成到七成,除非 Redis 很小。Redis 設定
maxmemory,並選好淘汰策略。兩邊的上限要同時存在。 -
3
給頁面快取留縫
緩衝池和 Redis 上限之和,要低於實體記憶體減去系統和連線。128GB 的機器上,兩邊合計先按不超過約 100GB 來試;256GB 的機器上,先按不超過約 210GB 來試。
-
4
上線一週後再看
置換持續升高,說明上限寫大了。先縮小緩衝池或 Redis,再觀察命中率。不要一看到讀碟就認定記憶體檔選錯。
把緩衝池設到實體記憶體的百分之八十以上,再跑一個大 Redis,系統會開始置換。先把兩個上限加總,確認還沒蓋過實體記憶體,再重啟服務。
加硬碟補不上記憶體
預設是 2 × 1TB NVMe,沒有硬體 RAID,兩塊碟各自直連,可用容量 2TB。熱資料放不進記憶體時,讀會落到這些碟上。 NVMe 能接住未命中,延遲仍高於記憶體命中。加購 2TB 碟每塊每月 $79,最多兩塊,仍然直連,加的是容量,不是記憶體。 資料檔怎麼和備份分開,是磁碟規劃的事,不要在選記憶體檔時用「再加一塊碟」代替 256GB。
頻寬也補不上緩衝池。預設 250M 不限流量,升到 1G 加 $250,升到 2G 加 $750,解決的是出口速率。 主庫和本機 Redis 之間的存取走迴路,並不消耗這檔頻寬。記憶體檔和頻寬檔是兩筆帳。 備份若要拉到機器外面,再按出口大小看 250M 夠不夠,那是另一項選擇。
記憶體檔定下來之後,再看兩塊直連碟怎麼放資料。直連碟不是硬體 RAID,劃分方式見 雙碟直連那篇。
和這兩檔機器怎麼對上
熱資料、快取和餘裕加總之後,下單頁裡就是這兩款。128GB 月租 $449,256GB 月租 $599。
CPU 都是 EPYC 7543P,32 核 / 64 執行緒,2.8–3.7 GHz。記憶體都是 DDR4-3200 ECC RDIMM,下單時選定,之後不能再加。
機器在日本東京。Linux 用 SSH 連上去改緩衝池和 maxmemory。無安裝費。
應付等於月租乘週期月數,月繳、季繳、半年繳、年繳都不另打折。選配,包括這台機器上的加碟和頻寬,隨主機同一週期預付。
若加總已經超過 256GB 還能舒服放下的範圍,例如緩衝池、大快取、搜尋堆積和應用程式要同時常駐,一台 256GB 也不要硬塞。 把快取或搜尋拆到第二台,比把所有上限都寫滿更清楚。本文只幫你在現有兩檔裡做這次選擇。