提升 Linux 上 Informix 并发性的实用方案
一 系统资源与内核优化
- 存储与内存:优先使用 SSD/NVMe,阵列建议 RAID 10;为数据库分配充足内存,减少换页与磁盘 I/O。
- 文件系统与挂载:选择 XFS/ext4,挂载选项使用 noatime,nodiratime 降低元数据写开销。
- I/O 调度器:数据库负载建议使用 deadline(SAN 可选 noop)。
- 内核参数要点(/etc/sysctl.conf):
- 共享内存:如 kernel.shmmax≈物理内存的50%–75%、kernel.shmall=shmmax/PAGE_SIZE、kernel.shmmni=4096;
- 内存回收:vm.swappiness=10–20、vm.dirty_ratio=20%、vm.dirty_background_ratio=10%;
- 文件与网络:fs.file-max≥65536、net.ipv4.tcp_tw_reuse=1、net.core.somaxconn=65535;
修改后执行 sysctl -p 生效。
- 大页支持:启用 Huge Pages 降低页表开销(如
vm.nr_hugepages 按内存规划设置),并配置数据库使用大页。
- 资源限制:提升进程可打开文件数(如
ulimit -n 或 /etc/security/limits.conf),避免连接数受限。
二 Informix 配置与并发参数
- 共享内存(ONCONFIG):设置 SHMVIRTSIZE(如 2–4GB 起步)、SHMADD(如 512MB–1GB)、SHMTOTAL(如设为 0 表示无限制)。
- 缓冲池:增大 BUFFERS(常见为物理内存的 25%–40%),合理设置 LRUS(如 8–16)、LRU_MAX_DIRTY(如 50%–60%)以平衡命中率与刷脏。
- CPU 虚拟处理器(VP):启用多处理器支持(如 MULTIPROCESSOR=1),按 CPU 规划 NUMCPUVPS 与
VPCLASS cpu,num=X,避免超配导致上下文切换激增。
- 锁与并发:根据并发事务规模调大 LOCKS(如 20万–50万),减少锁等待与升级。
- 日志与 I/O:合理规划物理/逻辑日志文件大小与数量,减少日志写入瓶颈;结合负载调优预读参数(如 RA_PAGES/RA_THRESHOLD)。
- 并行查询:设置 DS_MAX_QUERIES(如 10–20)、DS_TOTAL_MEMORY(如 256MB–1GB)、MAX_PDQPRIORITY(如 100),提升大数据量查询的并发吞吐。
三 SQL 与索引优化
- 索引策略:为高频 WHERE/JOIN/ORDER BY 列建立合适索引,优先 复合索引 实现覆盖索引,避免过多单列索引影响 DML。
- 执行计划:使用 SET EXPLAIN ON 分析
sqexplain.out,消除全表扫描、减少临时表与不必要的排序。
- 语句与事务:避免
SELECT *,减少不必要列与行;尽量批量提交 DML,缩短事务持有锁的时间,降低冲突。
- 统计信息:定期执行 UPDATE STATISTICS HIGH,确保优化器选择更优执行计划。
- 维护:对高访问表执行 索引重建/重组 与表 REORGANIZE,降低碎片、提升扫描与定位效率。
四 连接与会话治理
- 连接池:在应用侧使用连接池(如 HikariCP、DBCP),复用连接,避免频繁建连/断连带来的开销与端口占用。
- 协议与网络:在 onconfig 中根据连接类型设置合适的 NETTYPE,并优化 Linux TCP 队列与超时参数(如
net.core.somaxconn、tcp_tw_reuse),提升短连接并发能力。
- 事务设计:控制事务粒度,避免长事务与交互式锁持有;对热点行采用合理访问路径与隔离级别,减少锁等待与死锁。
- 隔离级别:结合业务选择 Read Committed/Cursor Stability/Repeatable Read/Last Committed Read 等,兼顾一致性与并发度。
五 监控与维护流程
- 实时监控:使用 onstat(如
onstat -g ses、onstat -g sql、onstat -g mem、onstat -g seg)与 onmode 观察会话、SQL、内存与共享内存;配合系统工具 top/vmstat/iostat/sar 定位瓶颈。
- 慢查询治理:定期分析慢 SQL 与执行计划,优先优化高成本语句与缺失索引场景。
- 例行维护:周期性 UPDATE STATISTICS、重建索引/重组表、清理碎片,保持执行计划稳定与 I/O 效率。
- 变更流程:任何参数或架构调整先在 测试环境验证,小步灰度,持续回归与压测,避免对生产造成冲击。