温馨提示×

linux informix如何调优内存

小樊
38
2026-09-05 03:37:57
栏目: 智能运维

在 Linux 上运行 IBM Informix Dynamic Server(IDS)时,内存调优的核心目标是:让数据库可用内存尽量用于关键缓存(尤其是缓冲池),避免 OS 交换(swap),并匹配业务负载类型。下面按“思路 → 关键参数 → 实操步骤 → 常见坑”来说明。


一、Informix 内存总体结构(先搞清楚钱花在哪)

Informix 主要内存由以下几部分组成:

  1. Shared Memory 段

    • Resident segment(常驻段)
      • Buffer pool(BUFFERS) ← 最重要
      • LRU / 锁 / 逻辑日志缓冲
    • Virtual segment(虚拟段,VPCLASS 用)
    • Message segment(IPC)
  2. 进程私有内存

    • 排序、哈希、临时表
    • 由 DS_TOTAL_MEMORY 等控制
  3. OS 级内存

    • filesystem cache
    • swap

二、最关键的内存参数(ONCONFIG)

1️⃣ BUFFERS(缓冲池,最重要)

BUFFERS 100000
  • 每个 buffer = PAGESIZE(通常 2KB / 4KB)
  • 经验值:
    • OLTP:物理内存的 40%~60%
    • 报表/数据仓库:可更高,但注意排序内存

示例(32GB 内存,页面 2KB):

BUFFERS 8000000   # 约 16GB

⚠️ 太大 → 启动慢、LRU 扫描慢
⚠️ 太小 → 磁盘 IO 暴涨


2️⃣ LOCKS(锁)

LOCKS 200000
  • 高并发写入必须调大
  • 锁不足会直接报错(-243)

3️⃣ LOGBUFF(逻辑日志缓冲)

LOGBUFF 512
  • 单位:KB
  • 写入频繁的系统建议 512~2048

4️⃣ PHYSBUFF(物理日志缓冲)

PHYSBUFF 512

5️⃣ VPCLASS(虚拟处理器 & 虚拟内存)

VPCLASS cpu,num=8
VPCLASS aio,num=4

虚拟内存由以下控制:

DS_TOTAL_MEMORY 4096000   # KB,约 4GB
DS_MAX_QUERIES 100
  • 用于:
    • 排序
    • 哈希
    • 临时表
  • 不超过物理内存 20%

三、Linux 系统层调优(非常重要)

1️⃣ 关闭 swap 使用倾向

sysctl -w vm.swappiness=1

2️⃣ 共享内存参数(SHM)

kernel.shmmax = 物理内存的 80%
kernel.shmall = shmmax / PAGE_SIZE

示例(32GB):

kernel.shmmax = 27487790694
kernel.shmall = 6710886

3️⃣ 禁用透明大页(THP)

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

Informix + THP = 性能灾难


4️⃣ 文件系统缓存

  • 数据文件建议:
    • noatime,nodiratime
  • 不要过度依赖 OS cache

四、调优流程(推荐顺序)

  1. 看现状

    onstat -g mem
    onstat -p
    onstat -g buf
    
  2. 看是否缺 buffer

    • onstat -p 中:
      • %cache 低
      • bufwaits 高 → 加 BUFFERS
  3. 看是否 swap

    free -m
    vmstat 1
    
  4. 逐步调整

    • 每次只改一个参数
    • 重启实例验证

五、常见误区

❌ BUFFERS 越大越好
❌ 用 OS cache 代替 buffer pool
❌ 开 THP
❌ swap 当内存用
❌ 忽略临时表内存


六、示例配置(32GB 内存,OLTP)

BUFFERS        8000000
LOCKS          200000
LOGBUFF        1024
PHYSBUFF       1024
DS_TOTAL_MEMORY 4096000
VPCLASS cpu,num=8
VPCLASS aio,num=4

如果你愿意,可以告诉我:

  • Informix 版本
  • Linux 版本
  • 内存大小
  • 业务类型(OLTP / 报表 / 混合)

我可以直接帮你算一套 ONCONFIG 参数模板。

0 踩