温馨提示×

Linux下Informix如何优化

小樊
51
2026-08-27 02:51:02
栏目: 智能运维

在 Linux 下对 IBM Informix(IDS) 进行优化,通常从 操作系统层、数据库参数、SQL 与索引、存储与 I/O、监控与维护 五个方面入手。下面给你一套实用、系统化的优化思路,适合生产环境。


一、操作系统与 Linux 层优化

1. 内存与 HugePages

Informix 对共享内存依赖很强。

# 查看共享内存
ipcs -m

建议:

  • 使用 HugePages(减少 TLB miss)
  • 锁定共享内存,防止 swap
# /etc/sysctl.conf
vm.swappiness = 1
kernel.shmmax = 17179869184
kernel.shmall = 4194304

2. 文件系统与 I/O 调度

  • 数据文件建议使用 xfs / ext4
  • 使用 deadline 或 noop I/O 调度器
cat /sys/block/sda/queue/scheduler

3. 文件句柄与进程数

ulimit -n
ulimit -u

建议:

* soft nofile 65536
* hard nofile 65536

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

1. 内存相关(最关键)

共享内存

SHMVIRTSIZE   51200        # 初始虚拟内存(KB)
SHMADD        8192         # 每次扩展

缓冲池(Buffer Pool)

重点优化项

BUFFERS       100000       # 数据缓冲区

经验值:

  • OLTP:物理内存的 40–60%
  • DSS/报表:可适当降低

查看命中率:

onstat -p

关注:

%cached

2. 日志与检查点

LOGFILES      6
LOGSIZE      50000

避免频繁 checkpoint:

CKPTINTVL    300

3. CPU 与线程

NUMCPUVPS    8
MULTIPROCESSOR 1

建议:

  • NUMCPUVPS ≈ CPU 核数
  • 不要超过物理核数

三、存储与表空间优化

1. dbspace 规划

  • 系统表、数据、索引、临时表 分开
  • 临时 dbspace 使用最快磁盘
CREATE TEMP TABLE ... IN tempdbs

2. 表与索引设计

表优化

  • 使用合适的 extent size
CREATE TABLE t1 (...) EXTENT SIZE 64 NEXT SIZE 32;

索引优化

  • 避免过多索引(影响 insert/update)
  • 联合索引顺序要符合查询条件

查看索引使用:

SET EXPLAIN ON;

四、SQL 与执行计划优化

1. 使用 SET EXPLAIN

SET EXPLAIN ON;
SELECT ...
SET EXPLAIN OFF;

查看:

sqexplain.out

关注:

  • 是否走索引
  • 是否有顺序扫描(seq scan)

2. UPDATE STATISTICS(非常重要)

统计信息过期是性能杀手。

UPDATE STATISTICS FOR TABLE tab_name;

生产建议:

  • 定期在夜间执行
  • 大表使用 MEDIUMHIGH

五、锁、并发与事务优化

1. 锁模式

BEGIN WORK;
SET LOCK MODE TO WAIT 10;

避免:

  • 长事务
  • 未提交事务

2. 隔离级别

  • OLTP:Repeatable Read / Committed Read
  • 报表:Dirty Read

六、监控与诊断工具

常用 onstat 命令

onstat -g sql      # SQL 执行
onstat -p          # 性能统计
onstat -d          # dbspace
onstat -m          # 日志

慢 SQL 定位

SELECT * FROM syssqltrace ORDER BY sql_totaltime DESC;

七、常见性能问题速查表

问题 原因 优化
CPU 高 顺序扫描 加索引
I/O 高 buffer 小 增大 BUFFERS
锁等待 长事务 提交频率
checkpoint 频繁 日志小 增大 LOGSIZE
临时表慢 临时 dbspace 在慢盘 换盘

八、推荐优化顺序(实战)

  1. onstat -p 看命中率
  2. SET EXPLAIN 看 SQL
  3. UPDATE STATISTICS
  4. 调整 BUFFERS / LOGSIZE
  5. 索引 + SQL 改写
  6. 操作系统与 I/O 优化

九、如果你愿意,我可以进一步帮你

你可以直接贴出:

  • onstat -p
  • onstat -g cfg
  • 慢 SQL
  • 服务器配置(CPU / 内存 / 磁盘)

我可以 针对你的环境给出精确参数建议,而不是通用方案。

0