在 Linux 上运行 IBM Informix Dynamic Server(IDS)时,内存调优的核心目标是:让数据库可用内存尽量用于关键缓存(尤其是缓冲池),避免 OS 交换(swap),并匹配业务负载类型。下面按“思路 → 关键参数 → 实操步骤 → 常见坑”来说明。
Informix 主要内存由以下几部分组成:
Shared Memory 段
进程私有内存
DS_TOTAL_MEMORY 等控制OS 级内存
BUFFERS 100000
PAGESIZE(通常 2KB / 4KB)示例(32GB 内存,页面 2KB):
BUFFERS 8000000 # 约 16GB
⚠️ 太大 → 启动慢、LRU 扫描慢
⚠️ 太小 → 磁盘 IO 暴涨
LOCKS 200000
LOGBUFF 512
PHYSBUFF 512
VPCLASS cpu,num=8
VPCLASS aio,num=4
虚拟内存由以下控制:
DS_TOTAL_MEMORY 4096000 # KB,约 4GB
DS_MAX_QUERIES 100
sysctl -w vm.swappiness=1
kernel.shmmax = 物理内存的 80%
kernel.shmall = shmmax / PAGE_SIZE
示例(32GB):
kernel.shmmax = 27487790694
kernel.shmall = 6710886
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Informix + THP = 性能灾难
noatime,nodiratime看现状
onstat -g mem
onstat -p
onstat -g buf
看是否缺 buffer
onstat -p 中:
%cache 低bufwaits 高 → 加 BUFFERS看是否 swap
free -m
vmstat 1
逐步调整
❌ BUFFERS 越大越好
❌ 用 OS cache 代替 buffer pool
❌ 开 THP
❌ swap 当内存用
❌ 忽略临时表内存
BUFFERS 8000000
LOCKS 200000
LOGBUFF 1024
PHYSBUFF 1024
DS_TOTAL_MEMORY 4096000
VPCLASS cpu,num=8
VPCLASS aio,num=4
如果你愿意,可以告诉我:
我可以直接帮你算一套 ONCONFIG 参数模板。