温馨提示×

怎么优化Linux的Informix

小樊
49
2026-07-17 00:04:54
栏目: 智能运维

Informix 在 Linux 上的优化是一个系统工程,需要从 OS、Informix 实例、数据库、SQL、硬件 五个层面一起做。下面给你一个实用、可落地的优化清单,按优先级排列,适合生产环境。


一、Linux 系统层优化(基础)

1. 内核参数(非常重要)

编辑 /etc/sysctl.conf

# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216

# 信号量
kernel.sem = 250 32000 100 128

# 文件句柄
fs.file-max = 655360

# 网络
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 4096

生效:

sysctl -p

2. 文件句柄限制

/etc/security/limits.conf

informix soft nofile 65536
informix hard nofile 65536

3. 关闭 NUMA(强烈建议)

numactl --interleave=all

或在 BIOS / grub 中关闭 NUMA。


4. 磁盘调度器

SSD / SAN:

echo deadline > /sys/block/sda/queue/scheduler

5. 关闭透明大页

echo never > /sys/kernel/mm/transparent_hugepage/enabled

二、Informix 实例级优化(ONCONFIG)

1. 内存配置(核心)

# 共享内存
SHMVIRTSIZE   1024
SHMADD        32768
BUFFERS       100000     # 根据内存调整
BUFFERPOOL    size=2k,buffers=100000

# 内存排序
SORTMEM       512

# 虚拟内存
VP_MEMORY    500000

经验值:

  • 物理内存 50–70% 给 Informix
  • Buffer 命中率 > 95%

2. CPU VP 配置

NUMCPUVPS     8
VPCLASS       cpu,num=8,noage

原则:

  • CPU VP ≈ 物理 CPU 核数(不要过多)

3. IO 相关

AUTO_TUNE     1
AUTO_LRU_TUNING 1
LRUS          8
LRU_MAX_DIRTY 60
LRU_MIN_DIRTY 50

三、数据库与表优化

1. 使用合适的锁模式

ALTER TABLE t LOCK MODE (ROW);

2. 合理设置Extent大小

CREATE TABLE t (...) EXTENT SIZE 1024 NEXT SIZE 256;

避免频繁小 Extent。


3. PDQ(并行查询)

PDQPRIORITY   10
MAX_PDQPRIORITY 100
DS_TOTAL_MEMORY 200000

适合大查询,不宜过高。


四、SQL 与索引优化(最容易见效)

1. 使用 UPDATE STATISTICS

UPDATE STATISTICS HIGH FOR TABLE t;

至少:

UPDATE STATISTICS LOW;

2. 检查执行计划

SET EXPLAIN ON;

重点看:

  • 全表扫描
  • 缺失索引
  • 错误 join 顺序

3. 索引建议

✅ 高选择性
✅ 常用于 WHERE / JOIN
❌ 不要过多(影响写性能)


五、Informix 常用诊断命令

内存 & IO

onstat -g mem
onstat -g buf

SQL 性能

onstat -g sql

锁问题

onstat -k

六、典型优化案例

慢查询

✅ UPDATE STATISTICS
✅ 加索引
✅ 改 SQL

CPU 高

✅ 减少 CPU VP
✅ 降低 PDQ

IO 高

✅ 增加 Buffer
✅ 分离 dbspace


七、我不是“聊”你问题,你可以直接告诉我:

你可以提供:

  • Informix 版本
  • Linux 版本
  • 物理内存 / CPU
  • 慢的具体现象(SQL / IO / CPU)
  • onstat 输出(可选)

我可以直接给你针对你环境的 ONCONFIG 和优化方案

0