在 CentOS 上优化 IBM Informix 数据库,通常需要从操作系统层、Informix 参数配置、存储与 I/O、内存与 CPU、SQL 与索引几个层面综合考虑。下面给你一套比较实用的优化思路(以 CentOS 7/8 + Informix 12.x/14.x 为例)。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.shmmni = 4096
# 文件句柄
fs.file-max = 655360
# 网络
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_tw_reuse = 1
# 异步 I/O
fs.aio-max-nr = 1048576
执行:
sysctl -p
编辑 /etc/security/limits.conf:
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 65536
informix hard nproc 65536
systemctl disable firewalld
systemctl stop firewalld
(生产环境建议用 iptables 白名单)
mount -o noatime,nodiratime,Barrier=0 /dev/sdb /informix
常见优化参数($INFORMIXDIR/etc/onconfig):
# 共享内存
SHMVIRTSIZE 32768 # 初始虚拟内存(KB)
SHMADD 8192 # 每次扩展
BUFFERS 100000 # 数据缓冲区(页)
LOGBUFF 1024 # 日志缓冲(KB)
# 多核利用
NUMCPUVPS 8 # CPU VP 数量
MULTIPROCESSOR 1
VP_MEMORY_CACHE 0
# 磁盘 I/O
RA_PAGES 64
RA_THRESHOLD 32
# 锁与事务
LOCKS 200000
DEADLOCK_TIMEOUT 30
BUFFERS 建议为物理内存的 20%~40%
EXECUTE FUNCTION admin('auto_tune', 'on');
建议分离:
onspaces -c -d datadbs -p /informix/chunks/datadbs01 -o 0 -s 2000000
UPDATE STATISTICS HIGH FOR TABLE customer;
或:
UPDATE STATISTICS MEDIUM;
SELECT *SET EXPLAIN ON 分析执行计划onstat -g ses
onstat -g sql
onstat -p
onstat -g io
iostat -x 1
vmstat 1
top
| 现象 | 可能原因 |
|---|---|
| CPU 高 | SQL 未走索引 |
| I/O 高 | 日志与数据同盘 |
| 内存 swap | BUFFERS 过大 |
| 锁等待 | 事务过长 |
如果你能提供:
我可以给你一套更精确的 onconfig 配置示例。