在 Linux 下对 IBM Informix(IDS) 进行优化,通常从 操作系统层、数据库参数、SQL 与索引、存储与 I/O、监控与维护 五个方面入手。下面给你一套实用、系统化的优化思路,适合生产环境。
Informix 对共享内存依赖很强。
# 查看共享内存
ipcs -m
建议:
# /etc/sysctl.conf
vm.swappiness = 1
kernel.shmmax = 17179869184
kernel.shmall = 4194304
cat /sys/block/sda/queue/scheduler
ulimit -n
ulimit -u
建议:
* soft nofile 65536
* hard nofile 65536
SHMVIRTSIZE 51200 # 初始虚拟内存(KB)
SHMADD 8192 # 每次扩展
重点优化项
BUFFERS 100000 # 数据缓冲区
经验值:
查看命中率:
onstat -p
关注:
%cached
LOGFILES 6
LOGSIZE 50000
避免频繁 checkpoint:
CKPTINTVL 300
NUMCPUVPS 8
MULTIPROCESSOR 1
建议:
CREATE TEMP TABLE ... IN tempdbs
CREATE TABLE t1 (...) EXTENT SIZE 64 NEXT SIZE 32;
查看索引使用:
SET EXPLAIN ON;
SET EXPLAIN ON;
SELECT ...
SET EXPLAIN OFF;
查看:
sqexplain.out
关注:
统计信息过期是性能杀手。
UPDATE STATISTICS FOR TABLE tab_name;
生产建议:
MEDIUM 或 HIGHBEGIN WORK;
SET LOCK MODE TO WAIT 10;
避免:
onstat -g sql # SQL 执行
onstat -p # 性能统计
onstat -d # dbspace
onstat -m # 日志
SELECT * FROM syssqltrace ORDER BY sql_totaltime DESC;
| 问题 | 原因 | 优化 |
|---|---|---|
| CPU 高 | 顺序扫描 | 加索引 |
| I/O 高 | buffer 小 | 增大 BUFFERS |
| 锁等待 | 长事务 | 提交频率 |
| checkpoint 频繁 | 日志小 | 增大 LOGSIZE |
| 临时表慢 | 临时 dbspace 在慢盘 | 换盘 |
你可以直接贴出:
onstat -ponstat -g cfg我可以 针对你的环境给出精确参数建议,而不是通用方案。