优化 CentOS 上的 IBM Informix 是一个系统工程,通常从 操作系统、Informix 实例参数、SQL 与索引、硬件与存储 四个层面入手。下面给你一套实用、可落地的优化思路,适合生产环境。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
# 信号量
kernel.sem = 250 32000 100 128
# 文件句柄
fs.file-max = 6815744
# 网络
net.ipv4.tcp_keepalive_time = 300
net.core.somaxconn = 1024
sysctl -p
编辑 /etc/security/limits.conf:
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 16384
informix hard nproc 16384
systemctl disable firewalld
systemctl disable selinux
生产环境建议 关闭 SELinux 或设为
permissive
/root/informix/data/informix/logs重点文件:$INFORMIXDIR/etc/$ONCONFIG
BUFFERS=200000
LRUS=8
LUR_MAX_DIRTY=60
LUR_MIN_DIRTY=50
经验值:
BUFFERS ≈ 物理内存的 30%~50% / 4KBVPCLASS cpu,num=8
VPCLASS aio,num=4
num 一般 = CPU 核数 或略少
LOGFILES=10
LOGSIZE=50000
CKPTINTVL=300
RA_PAGES=64
RA_THRESHOLD=32
查看执行计划:
SET EXPLAIN ON;
SELECT ...
UPDATE STATISTICS HIGH FOR TABLE table_name;
定期执行,否则优化器可能选错索引
CREATE TABLE t1 (
id INTEGER,
create_time DATE
) PARTITION BY EXPRESSION (
PARTITION p1 VALUES (create_time < '2024-01-01'),
PARTITION p2 VALUES (create_time >= '2024-01-01')
);
onspaces -c -d data_dbs -p /informix/data/data_dbs -o 0 -s 2000000
onstat -g seg # 内存
onstat -g sql # SQL
onstat -g ses # 会话
onstat -g io # IO
top
iostat -x 1
vmstat 1
| 问题 | 原因 | 解决 |
|---|---|---|
| CPU 高 | 索引缺失 | 加索引 |
| IO 高 | 全表扫描 | SQL 优化 |
| 内存不足 | BUFFERS 太小 | 调大 |
| 会话堆积 | 锁等待 | 查锁 |
| 启动慢 | 日志大 | 优化日志 |
如果你愿意,可以告诉我:
我可以 直接给你一套针对你环境的 ONCONFIG 模板和 SQL 优化方案。