實驗基準環境
- Red Hat 6.2 / Kernel 2.2.14-5 SMP
- TPC-C 類負載測試:Load Time (秒)、Transactions/Second (TPS)
- 基準配置:DB Block 2K、SGA Buffer/Shared Pool 128M、Redo Cache/Log 8M、Dictionary Tablespace
調優步驟與成果紀錄
| 步驟 | 變更 | Load Time | TPS | 提升幅度 |
| 基準 | - | 50.09s | 9.23 | - |
| 1. SGA Buffer+Shared 128M→256M | 記憶體加倍 | 49.22s | 9.38 | Load -1.73%, TPS +1.6% |
| 2. Redo Cache/Log 8M→16M | Redo 空間加倍 | 41.39s | 10.09 | Load -17.35%, TPS +9.33% |
| 3. Block Size 2K→4K | 區塊大小加倍 | 17.35s | 10.18 | Load -58% (累計 -138%), TPS +9.8% |
| 4. Dictionary→Local Tablespace | 本地管理表空間 | 15.07s | 10.43 | Load -13%, TPS +2.5% |
| 5. Block Size 4K→8K | 區塊再加倍 | 11.42s | 10.68 | Load -24%, TPS +2.4% |
| 6. DBWR/LGWR I/O Slaves = 4 | 非同步 I/O 從進程 | 10.48s | 10.72 | Load -8%, TPS +0.4% |
| 7. OS Kernel 參數調優 | SHMMAX=0x13000000, SEM=512/32000/100/100 | 9.54s | 11.51 | Load -9%, TPS +7.4% |
關鍵參數設定指令
# 共享記憶體最大段
echo 0x13000000 > /proc/sys/kernel/shmmax
# 訊號量: SEMMNI SEMMSL SEMOPM SEMMNS
echo 512 32000 100 100 > /proc/sys/kernel/sem
核心洞見
- Redo Log 空間 是高寫入負載首要瓶頸,優於單純加 Buffer Cache
- Block Size 從 2K→4K→8K 帶來指數級 Load Time 改善 (適合大量順序載入)
- Local Tablespace 消除字典鎖競爭,現代 Oracle 必用
- I/O Slaves 釋放 DBWR/LGWR 壓力,SMP 系統效果明顯
- OS Kernel 參數 是最後一哩路,SHMMAX/SEM 直接影響 SGA 分配與鎖效能
- TPS 提升有限:Load Time (批次載入) 易優化,TPS (併發交易) 受限於鎖、鎖鏈、單執行緒邏輯,需應用層架構配合
生產環境遷移清單
- Block Size:8K/16K (視 OS 頁面大小、平均列長)
- SGA:Buffer Cache 佔實體記憶體 60-80%,Shared Pool 適度、Redo Log 至少 4GB+、多組多工
- Tablespace:全域本地管理 + 自動區段空間管理 (ASSM)
- Redo:多重化 (Multiplexed)、足夠大小、快速磁碟 (NVMe/RAID 10)
- I/O:ASM / 原始裝置 / 檔案系統 (deadline/noop 調度器)
- OS:HugePages、Swappiness=10、noatime、檔案系統層面備份