前言:AIX 獨特的內存管理機制
AIX 採用虛擬內存管理器 (VMM),頁面替換算法深度影響 Oracle 性能。本文針對 Oracle 9i on AIX,系統講解 vmtune 參數調優、交換區規劃、內存優先級排序、數據塊大小選擇、日志歸檔緩存、SGA 調優六大核心領域。
一、 控制內存交換:vmtune min/maxperm 參數
1. 問題背景
- JFS/JFS2 文件系統緩存 與 Oracle SGA 競爭物理內存
- 數據文件在文件系統上時,「雙重緩存」:SGA 緩存 + 文件系統緩存 = 內存浪費 + 換頁風暴
2. 核心參數
| 參數 | 含義 | 默認值 | 建議值 (Oracle 專用機) |
| minperm% | 文件頁佔比低於此值 → 掃描器同時掃描文件頁與計算頁 | 20% | 5% |
| maxperm% | 文件頁佔比高於此值 → 僅掃描文件頁 | 80% | 20% (甚至 10%) |
3. 生效命令 (即時生效,重啟失效需寫入 /etc/tunables/nextboot)
# 將文件緩存壓縮至 5%-20%,騰出內存給 SGA/PGA
vmtune -p 5 -P 20
# 持久化 (AIX 5.3+)
echo "vmo -p -o minperm%=5 -o maxperm%=20" >> /etc/tunables/nextboot
4. 原理
降低 maxperm% 強制 VMM 優先淘汰文件緩存頁,保護計算頁 (Oracle SGA/PGA 歸屬計算頁) 不被換出。
二、 配置足夠交換區
三、 內存需求優先級排序 (內存不足時的分配策略)
當物理內存不足以滿足所有需求,按以下優先級分配:
- AIX 核心 + Oracle 核心進程 (PMON/SMON/DBWn/LGWR/CKPT) — 系統生存線
- 應用程序進程 (影子進程、中間件、批處理) — 業務執行主體
- Redo Log Buffer — 寫入性能關鍵,不可換出
- PGA + Shared Pool — 排序/雜湊/解析核心區
- Buffer Cache (DB_BLOCK_BUFFERS) — 最後分配,可通過
DB_KEEP_CACHE_SIZE 保護熱塊
決策例:Shared Pool 與 Buffer Cache 爭搶剩餘內存時,**優先給 Shared Pool** (解析優化、庫緩存命中率提升收益 > 單純增加 Buffer Cache)。
四、 數據塊大小選擇
| 場景 | 建議 DB_BLOCK_SIZE | 理由 |
| OLTP / 混合負載 | 2K / 4K (默認) | 行級併發高,小塊減少鎖爭用、緩存利用率高 |
| DSS / 數據倉庫 / BI | 8K / 16K / 32K | 全表掃描主導,大塊減少 I/O 次數、提升順序讀吞吐 |
對齊要求
- 文件系統 (JFS/JFS2) 塊大小 4K → Oracle 塊大小必須為 4K 整數倍 (4K/8K/16K/32K)
- 裸設備 (Raw Device) 邏輯塊 512B → Oracle 塊大小必須為 512B 整數倍
五、 調整日志歸檔緩存
- 參數:
LOG_ARCHIVE_BUFFER_SIZE (默認 4K,單位 Bytes)
- 建議:128K (131072) — 減少歸檔寫入系統調用次數,提升 0-20% 歸檔吞吐。
- 注意:不可過大 佔用 PGA/系統內存,監控
V$ARCHIVE_DEST_STATUS 確認無錯誤。
六、 SGA 調優核心參數
| 參數 | 影響 | 調優方向 |
| DB_BLOCK_BUFFERS (9i) / DB_CACHE_SIZE (10g+) | Buffer Cache 大小 | 盡大不盡小,配合 KEEP/RECYCLE 池分級 |
| SHARED_POOL_SIZE | 庫緩存、數據字典緩存、會話內存 | 優先於 Buffer Cache 擴展,防 ORA-04031 |
| LARGE_POOL_SIZE | 並行查詢、RMAN、Shared Server UGA | MTS/RMAN 環境必配 |
| JAVA_POOL_SIZE | OJVM 堆 | 使用 Java SP 時配置 |
原則:SGA 總大小 < 物理內存 60-70% (留 30-40% 給 PGA + OS + 文件緩存)。嚴禁 SGA 換出到交換區 — 會導致性能崩潰。
七、 總結清單
vmtune -p 5 -P 20 壓縮文件緩存,保護計算頁
- 交換區 ≥ 1.5x RAM,監控
vmstat pi/po
- 內存優先級:核心進程 > 應用進程 > Redo Buffer > PGA/Shared Pool > Buffer Cache
- OLTP 用 4K 塊,DSS 用 16K/32K 塊,注意文件系統對齊
LOG_ARCHIVE_BUFFER_SIZE=131072 加速歸檔
- SGA < 70% RAM,Shared Pool 優先,嚴防換出
AIX + Oracle 調優本質是**操作系統內存管理器與數據庫內存管理器的協同**,而非單邊調參數。建立 vmstat/svmon/AWR 三維監控視圖,才能精準定位瓶頸。
- 上一篇文章: Oracle 鎖表問題診斷與解決實戰:鎖模式詳解、查殺腳本、OS 級誤區
- 下一篇文章: Oracle 鎖機制分類詳解:自動/顯式、共享/排它、DML/DDL、內部閂鎖四維劃分
Copyright ©
程式碼之家 All Rights Reserved