在 Linux 上优化 IBM Informix(IDS) 是一个系统工程,通常从 操作系统 → 数据库参数 → SQL/索引 → 应用架构 逐层进行。下面给你一套实用、可落地的优化指南,适合生产环境。
# 建议
- 物理内存充足,Swap 尽量小
- 避免频繁 swap
vm.swappiness = 1
# 查看
free -h
✅ 推荐文件系统
xfs(推荐)ext3✅ 磁盘规划
dbspace 数据文件
temp dbspace
逻辑日志
物理日志
分开磁盘 / LUN
✅ IO 调度器
# SSD
echo deadline > /sys/block/sda/queue/scheduler
# HDD
echo deadline > /sys/block/sda/queue/scheduler
vi /etc/sysctl.conf
kernel.shmmax = 17179869184
kernel.shmall = 4194304
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.core.somaxconn = 4096
sysctl -p
vi /etc/security/limits.conf
informix soft nofile 65536
informix hard nofile 65536
BUFFERS 100000 # 数据缓存(最重要)
LRUS 8
LUR_MAX_DIRTY 10
LUR_MIN_DIRTY 5
SHMVIRTSIZE 1024
SHMADD 512
✅ 经验值:
BUFFERS 占物理内存 40%~60%PHYSBUFF 512
LOGBUFF 512
CLEANERS 8
# 使用单独的 temp dbspace
DBSPACETEMP tempdbs1,tempdbs2
PDQPRIORITY 50
MAXPDQPRIORITY 100
DS_MAX_QUERIES 10
✅ 原则
CREATE INDEX idx_xxx ON table(col1, col2);
✅ 检查缺失索引
SET EXPLAIN ON;
UPDATE STATISTICS HIGH FOR TABLE table_name;
或
UPDATE STATISTICS MEDIUM;
✅ 定期执行
CREATE TABLE t1 (
...
) FRAGMENT BY EXPRESSION
(c1 < '2023-01-01') IN dbs1,
(c1 >= '2023-01-01') IN dbs2;
❌
SELECT * FROM t WHERE col LIKE '%abc';
✅
SELECT col1, col2 FROM t WHERE col = 'abc';
✅ 避免硬解析
SET EXPLAIN ON;
重点看:
ALTER TABLE t LOCK MODE (ROW);
top
iostat -x 1
vmstat 1
onstat -g seg
onstat -p
onstat -g sql
onstat -g ses
你可以直接告诉我:
我可以 直接给你一份定制优化方案或 ONCONFIG 参数模板。