在 CentOS 下对 IBM Informix 进行调优,通常从操作系统层、数据库参数、SQL 与索引、存储与 I/O、监控工具几个维度入手。下面给你一套实用、可落地的调优思路(以常见版本如 11.5 / 12.10 / 14.10 为例)。
编辑 /etc/sysctl.conf:
kernel.shmmax = 68719476736 # 共享内存上限
kernel.shmall = 16777216 # 共享内存页总数
kernel.sem = 250 32000 100 128
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
应用:
sysctl -p
/etc/security/limits.conf:
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 2048
informix hard nproc 2048
echo never > /sys/kernel/mm/transparent_hugepage/enabled
写入 rc.local 持久化。
核心文件:$INFORMIXDIR/etc/onconfig
BUFFERS 100000 # 数据缓冲区(页)
LRUS 8 # LRU 队列数
NUMAIOVPS 4 # 异步 IO 线程
SHMVIRTSIZE 4096000 # 虚拟内存初始
SHMADD 1048576
经验:BUFFERS 占物理内存 30%~50%
RA_PAGES 64
RA_THRESHOLD 16
CKPTINTVL 300
NUMCPUVPS 4
VPCLASS cpu,num=4
MULTIPROCESSOR 1
LOGBUFF 512
PHYSBUFF 512
若用文件系统:
noatime,nodiratimeSET EXPLAIN ON;
SELECT ...
查看:
cat $INFORMIXDIR/tmp/sqexplain.out
UPDATE STATISTICS HIGH FOR TABLE customer;
UPDATE STATISTICS LOW FOR TABLE orders;
onstat -p # 性能
onstat -g ses # 会话
onstat -g sql # SQL
onstat -g iof # IO
onstat -g ckp # 检查点
oncheck -pt dbname:tabname
iostat -x 1
vmstat 1
top -u informix
| 问题 | 原因 | 处理 |
|---|---|---|
| CPU 高 | SQL 差 | EXPLAIN |
| IO 高 | 缓冲不足 | 增加 BUFFERS |
| 检查点慢 | 日志小 | 增大 PHYSBUFF |
| 锁等待 | 事务长 | 拆分事务 |
| 内存不足 | SHMVIRT | 调大 |
如果你能提供:
我可以给你针对性调优方案或 onconfig 示例。