在 Ubuntu 上运行 IBM Informix 时,优化通常从 系统层、数据库参数、SQL 与应用、存储与 I/O 四个方面入手。Informix 在 Linux 上的优化思路与 AIX/HP-UX 相似,但 Ubuntu 更偏向通用服务器环境,需要额外注意内核参数和资源限制。
下面给你一套 实用型优化清单(偏生产环境)。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
# 信号量(Informix 多进程)
kernel.sem = 250 32000 100 128
# 文件句柄
fs.file-max = 6815744
# 网络
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65000
生效:
sysctl -p
编辑 /etc/security/limits.conf:
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 16384
informix hard nproc 16384
否则可能出现
too many open files或连接数不足。
systemctl disable snapd
systemctl disable bluetooth
Ubuntu 上 不要启用 swap 过度使用,避免 Informix 性能抖动。
核心配置文件:$INFORMIXDIR/etc/$ONCONFIG
# 共享内存缓冲区
BUFFERS 100000 # 根据内存调整(单位:页)
# 每页 2KB,100000 ≈ 200MB
# 虚拟内存
SHMVIRTSIZE 256000
SHMADD 32768
经验值:
LOGFILES 6
LOGSIZE 50000
CKPTINTVL 300
LRUS 8
LUR_MAX_DIRTY 60
LUR_MIN_DIRTY 50
减少频繁 checkpoint,提高写入性能。
NUMCPUVPS 4
VPCLASS cpu,num=4
VPCLASS aio,num=4
建议:
CREATE TEMP TABLE ... IN tempdbs
✅ 推荐:
❌ 避免:
/home确保启用:
USE_AIO 1
UPDATE STATISTICS HIGH FOR TABLE tab_name;
SELECT *DBSPACETEMP tempdbs1,tempdbs2
避免临时表写根 dbspace。
onstat -g seg # 内存
onstat -g sql # SQL
onstat -g ses # 会话
onstat -g io # I/O
top
htop
iostat -x 1
vmstat 1
重点看:
| 问题 | 原因 | 解决 |
|---|---|---|
| CPU 高 | SQL 全表扫描 | 加索引 |
| IO 高 | checkpoint 频繁 | 增大 LOGSIZE |
| 内存不足 | BUFFERS 太小 | 增加 |
| 连接慢 | 网络 / 参数 | 调整 nettype |
| 锁等待 | 事务过长 | 缩短事务 |
你可以直接发我:
onstat -V)我可以 直接帮你给出一份“可落地的优化参数模板”。