在 Linux 上运行 IBM Informix(IDS) 的调优,通常从 操作系统层、数据库实例参数、SQL 与索引、存储与 I/O、监控工具 几个方面入手。下面给你一套实用调优思路,偏生产环境可用。
Informix 大量使用共享内存。
# 查看
ipcs -l
# 示例(根据内存调整)
kernel.shmmax = 物理内存的 80%
kernel.shmall = shmmax / PAGE_SIZE
kernel.sem = 250 32000 100 128
修改后:
sysctl -p
echo deadline > /sys/block/sda/queue/scheduler
/tmpnumactl --interleave=all oninit
echo never > /sys/kernel/mm/transparent_hugepage/enabled
BUFFERPOOL size=4k,buffers=100000
BUFFERS (自动或显式)
LOCKS 100000
LOGSIZE 根据事务量
经验:
BUFFERPOOL 占物理内存 40%~60%NUMCPUVPS=逻辑CPU数-1
SINGLE_CPU_VP=0
MULTIPROCESSOR=1
专用机器:
NUMCPUVPS = CPU核数
NETTYPE ipcshm,1,50,CPU
NETTYPE soctcp,4,100,NET
大表按时间/范围分片:
FRAGMENT BY RANGE (cdate)
SET EXPLAIN ON;
SELECT ...
查看:
$INFORMIXDIR/tmp/sqexplain.out
UPDATE STATISTICS HIGH FOR TABLE tab1;
或定期:
UPDATE STATISTICS LOW;
LOGSIZE 50000
LOGFILES 10
长事务处理:
onstat -x
onmode -z <session id>
onstat -p # 总体性能
onstat -g ses
onstat -g sql
onstat -g ckp
onstat -d # dbspace
onstat -l # 日志
bufreads / bufwriteslockwaitsdskreadslongtx| 场景 | 建议 |
|---|---|
| 慢查询 | EXPLAIN + 索引 + 统计信息 |
| CPU 高 | VP 数、SQL 并发 |
| I/O 高 | dbspace 分离、buffer 增大 |
| 锁等待 | 事务拆分、隔离级别 |
| 启动慢 | 减少 chunk / log |
你可以告诉我:
onstat -p 输出我可以直接帮你 看参数、给 onconfig 模板。