在 CentOS 上调优 IBM Informix(如 11.70 / 12.10 / 14.10),通常从 操作系统层、数据库实例参数、SQL 与索引、监控手段 四个方面入手。下面给你一套较系统的调优思路和常用做法。
Informix 对共享内存、信号量、文件句柄要求较高。
kernel.shmmax = 68719476736 # 最大共享内存段
kernel.shmall = 16777216 # 共享内存页总数
kernel.sem = 250 32000 100 1024
fs.file-max = 65536
net.ipv4.tcp_keepalive_time = 300
执行:
sysctl -p
Informix 用户(如 informix):
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 2048
informix hard nproc 2048
firewalld(如内网)selinux(生产可设为 permissive)setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
主要文件:$INFORMIXDIR/etc/onconfig.<servername>
BUFFERS 100000 # 数据缓冲区(页)
RESIDENT 1 # 常驻内存
SHMVIRTSIZE 32768 # 虚拟内存初始大小(KB)
SHMADD 8192
LOCKS 20000
BUFFERS 一般设为物理内存的 20%~40%
CKPTINTVL 300
LRUS 8
LUR 4
PHYSFILE 512000
LOGFILES 10
LOGSIZE 512000
MULTIPROCESSOR 1
NUMCPUVPS 4
NUMAIOVPS 4
NETTYPE soctcp,4,50,CPU
CREATE INDEX idx_emp_dept ON employee(dept_id, hire_date);
SET EXPLAIN ON 分析执行计划SELECT *SET EXPLAIN ON;
SELECT * FROM orders WHERE cust_id = 1001;
UPDATE STATISTICS HIGH FOR TABLE orders;
onstat -p # 性能概览
onstat -g ses # 会话
onstat -g sql # SQL
onstat -g ckp # 检查点
onstat -g io # I/O
onstat -g sql | sort -k 5 -r
online.logSQLTRACESQLTRACE level=low,ntraces=1000,size=4,mode=oneshot
| 问题 | 可能原因 | 解决 |
|---|---|---|
| CPU 高 | 缺索引 / 全表扫 | 建索引 |
| I/O 高 | 缓冲区小 | 增大 BUFFERS |
| 锁等待 | 事务长 | 缩短事务 |
| checkpoint 久 | 日志小 | 增大 LOGSIZE |
BUFFERS 200000
NUMCPUVPS 4
NUMAIOVPS 4
SHMVIRTSIZE 32768
LOGFILES 10
LOGSIZE 512000
如果你能提供:
我可以给你 更精确的 onconfig 参数建议。