温馨提示×

Linux下Informix如何调优

小樊
34
2026-07-17 00:07:57
栏目: 智能运维

在Linux环境下对 IBM Informix 进行调优,通常从 操作系统、数据库参数、SQL与索引、存储与I/O、内存与CPU 等多个层面入手。下面给你一个比较系统、实战向的调优指南。


一、操作系统层面(Linux)

1. 内核参数优化

Informix 对共享内存、信号量、文件句柄等依赖较大。

# 查看当前参数
sysctl -a | egrep "shm|sem|file-max"

建议调整(示例,需根据内存调整):

vi /etc/sysctl.conf

kernel.shmmax = 68719476736        # 64GB
kernel.shmall = 16777216
kernel.sem = 250 32000 100 128
fs.file-max = 6815744

应用:

sysctl -p

2. 文件句柄与用户限制

Informix 通常需要大量文件句柄。

vi /etc/security/limits.conf
informix soft nofile 65536
informix hard nofile 65536
informix soft nproc 65536
informix hard nproc 65536

3. 关闭或优化 swap

Informix 更依赖物理内存,swap 过多影响性能。

# 查看
free -h

# 降低 swap 倾向
sysctl vm.swappiness=10

二、Informix 实例参数调优(ONCONFIG)

核心配置文件:$INFORMIXDIR/etc/$ONCONFIG


1. 内存相关参数

共享内存

SHMVIRTSIZE   32768        # 初始虚拟共享内存(KB)
SHMADD        8192         # 每次扩展大小
SHMTOTAL      0            # 0 表示不限制

缓冲池(最关键)

BUFFERS       100000       # 数据缓冲区(页)

经验值:

  • OLTP:物理内存的 40%~60%
  • 数据仓库:可更高

2. 日志与检查点

LOGFILES      6
LOGSIZE       50000        # 每个日志大小(KB)
CKPTINTVL     300          # 检查点间隔(秒)

避免频繁检查点:

RTO_SERVER_RESTART 0

3. 锁与事务

LOCKS          200000
MAXLOCKS       20000

4. 并发与线程

NUMCPUVPS     4            # CPU VP 数量(建议 ≤ CPU 核数)
NETTYPE       soctcp,1,50,CPU

三、存储与 I/O 调优

1. 表空间与 chunk 规划

  • 数据、索引、临时表空间分离
  • chunk 使用 裸设备 或 高性能文件系统(xfs)
CREATE TABLE t1 (...) IN datadbs;
CREATE INDEX idx1 ON t1(c1) IN indexdbs;

2. 临时表空间优化

DBSPACETEMP   tempdbs1,tempdbs2

避免临时表空间在系统盘。


3. 异步 I/O

Linux 下建议启用 KAIO:

USE_AIO        1

四、SQL 与索引优化

1. 使用 UPDATE STATISTICS

UPDATE STATISTICS FOR TABLE t1;

定期执行,尤其是:

  • 大批量数据导入后
  • 索引重建后

2. 索引策略

  • 高选择性字段建索引
  • 避免过多索引(影响写性能)
  • 联合索引注意字段顺序
CREATE INDEX idx_emp ON employee(dept, id);

3. SQL 优化

  • 避免 SELECT *
  • 避免函数在索引列上
  • 使用绑定变量
-- 不推荐
SELECT * FROM t WHERE UPPER(name)='A';

-- 推荐
SELECT id,name FROM t WHERE name='A';

五、监控与诊断工具

1. Informix 自带工具

onstat -g cfg      # 参数
onstat -g mem      # 内存
onstat -g ses      # 会话
onstat -g sql      # SQL
onstat -g iof      # I/O

2. 慢 SQL 定位

onstat -g sql

结合:

SET EXPLAIN ON;

六、常见性能问题速查表

问题 可能原因 优化方向
CPU 高 索引缺失 加索引
I/O 高 缓冲池小 增大 BUFFERS
锁等待 事务过长 缩短事务
临时空间慢 tempdb 不合理 分离 tempdb
启动慢 检查点频繁 调大 LOGSIZE

七、典型 OLTP 调优建议(总结)

  • 内存:BUFFERS 占物理内存 50%
  • CPU VP:等于 CPU 核数
  • 日志:大日志 + 少切换
  • 表空间:数据 / 索引 / 临时分离
  • SQL:定期 UPDATE STATISTICS

如果你愿意,我可以:

  • ✅ 根据你的 硬件配置 给出具体参数
  • ✅ 分析 onstat 输出
  • ✅ 针对 某条慢 SQL 做优化
  • ✅ 对比 Informix vs Oracle/MySQL 调优差异

你可以直接贴:

Informix 版本 + Linux 版本 + 内存/CPU + ONCONFIG 关键参数

0