Informix 在 Linux 上的优化,通常从 操作系统、数据库参数、SQL 与应用、存储与硬件 四个层面来做。下面给你一套比较系统、实战向的优化思路(适用于 Informix 11+ / 12+ / 14)。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 17179869184 # 16GB,建议 ≥ BUFFERPOOL
kernel.shmall = 4194304
# 信号量
kernel.sem = 250 32000 100 128
# 文件句柄
fs.file-max = 655360
# 网络
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
sysctl -p
/etc/security/limits.conf
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 65536
informix hard nproc 65536
vm.swappiness = 1
BUFFERPOOL size=16k,buffers=200000
经验值:
查看命中率:
onstat -p
关注:
LOCKS=100000
DEF_TABLE_LOCKSIZE=ROW
避免表级锁。
LOGFILES=10
LOGSIZE=50000
CKPTINTVL=300
防止频繁 checkpoint。
VPCLASS cpu,num=8,noage
经验:
查看:
onstat -g glo
推荐结构:
rootdbs
datadbs
indexdbs
tempdbs
logdbs
CREATE TEMP TABLE ... IN tempdbs;
临时排序、hash join 非常依赖 tempdbs。
echo deadline > /sys/block/sda/queue/scheduler
UPDATE STATISTICS HIGH FOR TABLE t1;
❌ 错误:
SELECT * FROM t WHERE func(col)=1;
✅ 正确:
SELECT * FROM t WHERE col = value;
避免:
PREPARE / EXECUTE IMMEDIATE
使用参数化 SQL。
SET EXPLAIN ON;
关注:
| 目的 | 命令 |
|---|---|
| 内存命中率 | onstat -p |
| 锁等待 | onstat -k |
| SQL 执行 | onstat -g sql |
| 表空间 | onstat -d |
| 会话 | onstat -u |
| 检查点 | onstat -m |
你可以直接贴:
onstat -ponstat -g gloonstat -d我可以 直接帮你算 BUFFERPOOL、VP、索引方案,而不是只给理论。