Debian 上提升 Informix 查询效率的实用清单
一 基础与系统层优化
- 存储与文件系统:优先使用 SSD/NVMe,为数据、日志、临时空间分别挂载到高性能磁盘;选择 XFS/ext4 等适合数据库负载的文件系统,合理设置挂载选项(如 noatime、barrier 等),减少抖动与写放大。
- 内存与 I/O:保证充足的 RAM 以容纳热点数据与索引;结合工作负载调整内核参数(如 vm.swappiness、readahead、I/O 调度器),降低磁盘等待。
- CPU 与并行:充分利用多核,合理设置 CPU VP 数量与并行度;对分析型大查询启用 PDQ(并行查询) 提升吞吐。
- 网络:若应用与数据库分离,使用低延迟、高带宽网络;优化 TCP 窗口、somaxconn、backlog 等,减少连接排队。
- 监控基线:在调优前后保留关键指标基线(如逻辑/物理读、命中率、会话并发、I/O 等待),便于量化收益。
二 数据库配置与内存调优
- 内存与缓存:根据可用内存与负载,合理提升 缓冲池(如 BUFFERPOOL/SHM 相关参数)、排序区、会话私有内存等,避免频繁磁盘读写与排序溢出。
- 并行与连接:结合 CPU 核数 与并发会话,配置 PDQPRIORITY/MAX_PDQPRIORITY 与连接池,避免连接风暴与过度并行。
- 虚拟处理器与 I/O:按硬件拓扑配置 CPU VP、I/O VP;如使用裸设备/直连存储,可采用 onlyovp 或相应的 vpclass 策略减少额外开销。
- 临时空间:为排序、散列聚合、临时表预留充足的 临时 dbspace,避免磁盘颠簸。
- 变更流程:任何参数调整遵循“小步变更—回归测试—指标比对—固化”的闭环。
三 SQL 与索引优化
- 执行计划与诊断:在会话中开启 SET EXPLAIN ON/ANALYZE 输出执行计划与统计,定位全表扫描、低效连接、排序溢出等问题。
- 索引策略:
- 为高频 WHERE、JOIN、ORDER BY 列建立 B-tree 复合索引,将选择性高的列放在前面;必要时使用 覆盖索引 避免回表。
- 避免在索引列上使用函数或表达式(如 UPPER(col)),以免索引失效;谨慎使用 LIKE ‘%xxx%’,优先改写为前缀匹配或全文检索。
- 控制索引数量,删除冗余/低效索引,降低 DML 开销。
- 对长文本可用 前缀索引;必要时使用 索引提示(INDEX) 引导优化器选择更优索引。
- SQL 写法:
- 避免 **SELECT ***,只取必要列;优先 JOIN 替代相关子查询;减少中间结果集与重复扫描。
- 合理使用 LIMIT/TOP 限制返回行数;分页查询优先基于索引键的范围扫描。
- 在循环内重复执行的语句使用 PREPARE/EXECUTE 或存储过程,减少解析与网络往返。
四 统计信息与维护
- 统计信息:定期执行 UPDATE STATISTICS,在数据大量导入/删除或分布明显变化后及时更新,确保优化器生成更优计划。
- 索引维护:对高变更表定期 重建/重组索引,降低索引层级与碎片;当 索引层级 > 4 时优先考虑重建。
- 空间与碎片:监控 dbspace 使用率 与 extent 碎片,按需执行 腾挪/重组,避免表/索引跨多 extent 导致 I/O 放大。
- 例行巡检:建立 周/月度 巡检(统计、索引健康、空间、长事务、锁等待),将问题前置处理。
五 监控与持续优化
- 数据库监控:使用 onstat、onmode 观察会话、锁、I/O、内存、检查点等;对异常 SQL 进行 SET EXPLAIN 与 A/B 对比测试。
- 系统监控:结合 top、vmstat、iostat、sar 等工具,持续跟踪 CPU、内存、I/O、网络与负载变化。
- 变更与回滚:任何配置/索引/SQL 调整先在 测试环境 验证,保留回滚方案;上线后对比基线指标,确认收益与副作用。
- 容量与扩展:当单库/单表到达瓶颈时,评估 分区表、读写分离、分片 与硬件扩容路径。