AIX 採用虛擬記憶體管理 (VMM),將記憶體頁分為 Computational Pages (程式/資料) 與 File Pages (文件快取)。Oracle SGA 屬 Computational,JFS/JFS2 文件系統快取屬 File Pages。兩者競爭實體記憶體易導致大量分頁。
# 預設值
MINPERM = ((實體頁數) - 1024) * 0.20
MAXPERM = ((實體頁數) - 1024) * 0.80
# Oracle 環境建議:壓縮文件快取上限,騰出記憶體給 SGA
vmtune -p 5 -P 20 # MINPERM=5%, MAXPERM=20%
效果:文件快取頁佔用超過 20% 時強制回收,保護 Computational Pages (SGA/PGA) 不被換出。
mkps -s 20 -a vg00 (增加 20 個 LP)。lsps -a 查看使用率,vmstat 5 觀察 pi/po (page in/out) 是否持續非零。原則:寧犧牲 Buffer Cache 命中率,不可讓 Shared Pool 或 Redo Buffer 被換出。Shared Pool 換出導致 Hard Parse 暴增;Redo Buffer 換出阻塞 LGWR,拖垮所有提交。
| 環境 | 建議值 | 理由 |
|---|---|---|
| OLTP / 混合 | 2K / 4K | 減少爭用、適應小行、隨機存取 |
| DSS / Data Warehouse / BI | 8K / 16K / 32K | 大掃描效率高、壓縮比好 |
| 檔案系統 (JFS/JFS2) | 4K 整數倍 | 對齊 OS 區塊,避免 Read-Modify-Write |
| 裸裝置 | 512B 整數倍 | 對齊磁碟區塊 |
-- 增加歸檔緩衝區至 128KB (預設 4KB)
ALTER SYSTEM SET LOG_ARCHIVE_BUFFER_SIZE = 131072 SCOPE=SPFILE;
-- 可提升 0~20% 歸檔吞吐量
DB_BLOCK_BUFFERS (9i 手動管理) / DB_CACHE_SIZE (10g+ 自動) :最大化在記憶體優先級允許下。SHARED_POOL_SIZE:優先於 Buffer Cache 增加,防止 Hard Parse、ORA-04031。V$SGASTAT、V$BUFFER_POOL_STATISTICS、V$LIBRARYCACHE (RELOADS/PINS)。vmstat 5 10 → pi/po 持續 > 0 表示記憶體壓力。svmon -G → 確認 Computational % 佔比合理。vmtune -a → 確認 MINPERM/MAXPERM 生效。cannot allocate new log、checkpoint not complete → 擴大 Redo Log。DBMS_STATS.GATHER_SYSTEM_STATS (10g+) 讓 CBO 了解 I/O 能力。AIX 上 Oracle 調優核心在於 保護 Computational Pages (SGA/PGA) 不被 VMM 換出:壓縮文件快取 (vmtune)、充足交換區、明確優先級、適當區塊大小、監控分頁指標。SGA 內部優先保 Shared Pool/Redo Buffer,次才是 Buffer Cache。