在 Ubuntu(或任何 Linux)下对 IBM Informix 做性能调优,思路和其他数据库类似:先定位瓶颈,再分层优化。下面给你一个实用型调优清单,偏运维和 DBA 视角。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
# 文件句柄
fs.file-max = 655360
# 网络
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
执行:
sysctl -p
/etc/security/limits.conf
informix soft nofile 65536
informix hard nofile 65536
ext4(简单稳定)xfs(高并发更好)关键参数(示例):
# 内存
BUFFERS 100000 # 缓冲池(页)
LOCKS 20000
LOGSIZE 50000
# 日志
LOGFILES 10
PHYSFILE 200000
常用调优点:
LRUS 8
LRU_MAX_DIRTY 70
LRU_MIN_DIRTY 60
NETTYPE soc_tcp,4,50,CPU
SELECT * FROM sysmaster:sysptnhdr
WHERE ph_dbsname = 'dbname';
UPDATE STATISTICSUPDATE STATISTICS HIGH FOR TABLE tab_name;
SET EXPLAIN ON 看执行计划SELECT *onstat -g ses
onstat -g sql
onstat -p
onstat -g buf
iostat -x 1
vmstat 1
top -u informix
| 现象 | 可能原因 |
|---|---|
| CPU 高 | SQL 差 / 缺索引 |
| I/O 高 | 日志和数据混盘 |
| 锁等待 | 事务太长 |
| 内存不足 | BUFFERS 太小 |
如果你愿意,可以告诉我:
我可以给你更针对性的参数和 SQL 优化建议。