在 Ubuntu 下使用 IBM Informix(如 Informix Dynamic Server,IDS)时,优化通常分为 系统层面、数据库配置层面、SQL 与索引层面、监控与维护 四个方向。下面给你一套比较实用的优化思路。
Informix 对共享内存、信号量、文件句柄敏感。
编辑 /etc/sysctl.conf(示例,按内存调整):
kernel.shmmax = 4294967296
kernel.shmall = 1048576
kernel.sem = 250 32000 100 128
fs.file-max = 65536
生效:
sysctl -p
编辑 /etc/security/limits.conf:
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 4096
主要文件:$INFORMIXDIR/etc/onconfig
SHMVIRTSIZE 1024000 # 初始虚拟内存(KB)
SHMADD 131072 # 每次扩展
BUFFERS 100000 # 数据缓冲区(很重要)
经验:BUFFERS 占用物理内存 30%~50%
LOGBUFF 1024
PHYSBUFF 1024
CKPTINTVL 300
NUMCPUVPS 4
MULTIPROCESSOR 1
VPCLASS cpu,num=4
DBSPACETEMP tempdbs
CREATE INDEX idx_emp_dept ON employee(dept_id, hire_date);
非常关键
UPDATE STATISTICS HIGH FOR TABLE employee;
-- 或
UPDATE STATISTICS MEDIUM;
SELECT *onstat -p # 命中率
onstat -g ses # 会话
onstat -g sql # SQL
onstat -g ckp # 检查点
关注:
onstat -g sql
结合 SET EXPLAIN ON 看执行计划。
| 场景 | 建议 |
|---|---|
| 查询慢 | 建索引 + UPDATE STATISTICS |
| 写入慢 | 分离物理日志 / 临时表空间 |
| CPU 高 | 增加 CPU VPs |
| 内存不足 | 增大 BUFFERS |
| 锁等待 | 缩短事务、优化 SQL |
onstat -p 看命中率onstat -g sql 找慢 SQLSET EXPLAIN 分析执行计划UPDATE STATISTICS如果你能告诉我:
我可以给你 更针对性的 onconfig 参数和索引方案。