在 CentOS 上优化 IBM Informix 数据库,通常需要从 操作系统层、数据库参数、存储与 I/O、SQL 与应用、监控与维护 几个方面入手。下面给你一份比较系统的优化指南(以常见 ONCONFIG + CentOS 7/8 为背景)。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
# 文件句柄
fs.file-max = 655360
# 网络
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 4096
执行:
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 /dev/sdb /informix
BUFFERS 100000 # 根据内存调整(每buffer 4K)
LOCKS 20000
LOGSIZE 1024
PHYSDBS rootdbs
经验值:
onstat -p 看缓存命中率(>95% 较好)NUMCPUVPS 8
MULTIPROCESSOR 1
VPCLASS cpu,num=8
规则:
RA_PAGES 64
RA_THRESHOLD 16
CKPTINTVL 300
rootdbs:只放系统data1dbs、data2dbs:业务数据tempdbs:临时表logdbs:逻辑日志示例:
onspaces -c -d data1dbs -p /informix/data1 -o 0 -s 2000000
onstat -g sqc
onstat -g ses
定期执行:
UPDATE STATISTICS HIGH FOR TABLE tab1;
或:
UPDATE STATISTICS MEDIUM;
LOGFILES 20
LOGSIZE 1024
CKPTINTVL 300
RTO_SERVER_RESTART 0
DBSPACETEMP tempdbs
PdqPriority 50
大查询可启用 PDQ:
SET PDQPRIORITY 100;
onstat -i
onstat -p # 性能
onstat -d # dbspace
onstat -l # 日志
onstat -u # 用户会话
UPDATE STATISTICSALTER TABLE tab1 FRAGMENT BY ROUND ROBIN;
| 现象 | 可能原因 |
|---|---|
| CPU 高 | SQL 未走索引 |
| IOWAIT 高 | dbspace 单盘 |
| 锁等待 | 事务过长 |
| 内存不足 | BUFFERS 过大 |
你可以补充:
onstat -p 输出我可以给你一份 针对你机器的 ONCONFIG 配置建议。