在 Ubuntu 上优化 IBM Informix 数据库,通常从 操作系统层、Informix 配置层、硬件/存储层、SQL 与应用层 四个方面入手。下面给你一套实用、可落地的优化清单,适用于大多数生产或准生产环境。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
# 信号量
kernel.sem = 250 32000 100 128
# 文件句柄
fs.file-max = 6815744
# 网络
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
应用:
sudo sysctl -p
编辑 /etc/security/limits.conf:
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 65536
informix hard nproc 65536
sudo systemctl disable snapd bluetooth cups
减少系统抖动,提升稳定性。
✅ 优选:
ext4(稳定)xfs(高并发、大文件)❌ 不推荐:
挂载参数示例:
noatime,nodiratime,data=writeback
路径示例:
$INFORMIXDIR/etc/onconfig
BUFFERS 100000
LRUS 8
LUR_MAX_DIRTY 10
CLEANERS 4
SHMVIRTSIZE 32768
SHMADD 8192
建议:
- BUFFERS ≈ 物理内存的 30%~50%
- 不要超过系统共享内存上限
PHYSBUFF 512
LOGBUFF 512
CKPTINTVL 300
NUMCPUVPS 8
SINGLE_CPU_VP 0
MULTIPROCESSOR 1
NUMCPUVPS ≈ CPU 核数(不要超过物理核)
RA_PAGES 64
RA_THRESHOLD 32
强烈建议:
| 类型 | 磁盘 |
|---|---|
| rootdbs | 普通盘 |
| datadbs | SSD / 高速盘 |
| logdbs | 低延迟盘 |
| tmpdbs | 内存盘 / 高速盘 |
chown informix:informix /dev/sdb
裸设备比文件系统 I/O 延迟更低。
CREATE TABLE t1 (
id INTEGER
) IN datadbs EXTENT SIZE 1024 NEXT SIZE 256;
避免:
UPDATE STATISTICS HIGH FOR TABLE orders;
定期执行,避免执行计划退化。
✅ 推荐:
❌ 避免:
SELECT id, name FROM customer;
top
htop
iostat -x 1
vmstat 1
onstat -g seg # 内存
onstat -g sql # SQL
onstat -g ses # 会话
onstat -g io # IO
onstat -g sql -r
| 问题 | 解决 |
|---|---|
| 启动失败 | 检查 shmmax / limits |
| 中文乱码 | 设置 DB_LOCALE=zh_CN.utf8 |
| 性能抖动 | 禁用 swap |
| 磁盘满 | 单独日志盘 |
NUMCPUVPS 12
BUFFERS 400000
SHMVIRTSIZE 32768
SHMADD 8192
LRUS 8
CLEANERS 4
你可以直接贴出:
我可以给你定制优化方案。