硬件是性能调优的底层支撑,需优先满足以下要求:
操作系统配置直接影响Informix的资源利用率,需重点调整以下参数:
/etc/sysctl.conf文件,调整vm.swappiness(控制交换空间使用倾向,建议设为10-20,减少不必要的内存交换)、vm.watermark_scale_factor(提升page cache回收效率,建议设为10-20)、kernel.shmmax(单个共享内存段最大大小,需大于Informix的SHMTOTAL参数值)。fs.file-max(系统最大文件描述符数,建议设为65536以上),避免数据库连接过多导致文件描述符耗尽。noatime(不更新文件访问时间,减少写入次数)、data=writeback(减少日志开销,适用于OLAP场景)等选项。echo noop > /sys/block/sdX/queue/scheduler命令生效。共享内存是Informix的核心内存组件,直接影响数据库性能,关键参数如下:
SHMVIRTSIZE:共享内存初始虚拟段大小(建议设为物理内存的10%-20%,如32GB内存设为4GB),避免频繁扩展导致的性能抖动。SHMADD:共享内存附加段大小(建议设为SHMVIRTSIZE的1/4-1/2,如4GB设为2GB),用于动态扩展共享内存。SHMTOTAL:共享内存总量限制(建议设为物理内存的50%-70%,如32GB内存设为16GB),需结合系统其他进程需求调整;同时确保/proc/sys/kernel/shmmax值大于SHMTOTAL。BUFFERS:数据缓冲区大小(建议设为物理内存的30%-50%,如32GB内存设为12GB),用于缓存数据页;监控onstat -p中的bufreads/bufwrites(缓冲池命中率),理想值应**>95%**,未达标可逐步增加BUFFERS。LRUS/LRU_MAX_DIRTY/LRU_MIN_DIRTY:LRU(最近最少使用)队列参数(LRUS设为BUFFERS的1/8-1/4,如12GB缓冲区设为1500;LRU_MAX_DIRTY设为50-60%,LRU_MIN_DIRTY设为30-40%),平衡内存使用与写I/O压力。VP负责处理不同类型的任务(如CPU VP处理查询、AIO VP处理异步I/O),合理配置可提升并发性能:
NUMCPUVPS:CPU VP数量(建议设为CPU核心数-1,如8核CPU设为7),避免过多VP导致上下文切换开销;OLAP场景可设为CPU核心数(充分利用多核计算能力)。VPCLASS:定义VP类(如VPCLASS cpu,num=4表示配置4个CPU VP;VPCLASS aio,num=2表示配置2个AIO VP),根据任务类型调整;AIO VP数量建议为NUMCPUVPS的1-2倍,提升异步I/O效率。AIO_NUM_POOLS:AIO池数量(建议设为NUMCPUVPS的1-2倍),减少I/O等待时间。VP_MEMORY_CACHE_KB(每个VP的内存缓存大小,建议设为BUFFERS的1/10-1/5,如12GB缓冲区设为2GB),提升VP处理查询的效率。SHMTOTAL,如16GB设为8192个);② 执行sudo sysctl vm.nr_hugepages=8192;③ 在onconfig中添加HUGEMEM=1并重启Informix。CREATE INDEX idx_name ON table_name(column_name));避免在索引列上使用函数(如WHERE UPPER(name) = 'JOHN'会导致索引失效)。CREATE INDEX idx_name_age ON table_name(name, age)),提升多条件查询效率。CREATE INDEX idx_covering ON table_name(column1, column2)),避免回表操作(减少磁盘I/O)。REBUILD INDEX index_name重建碎片化索引,提升索引查询效率。WHERE条件过滤数据);简化复杂子查询(如将子查询分解为多个简单查询);限制结果集大小(如SELECT TOP 100或LIMIT 100)。UPDATE STATISTICS HIGH FOR TABLE table_name更新表统计信息,帮助优化器生成更优的执行计划。LIKE '%keyword'(会导致全表扫描),如需使用可使用全文索引替代。onstat -g mem查看内存使用详情、onstat -p查看缓冲池命中率、onstat -g seg查看共享内存段分布)、系统工具(free -m查看系统内存、vmstat 2 5查看虚拟内存与I/O活动、iostat -x 2 5查看磁盘I/O性能)定期监控性能指标。$INFORMIXDIR/online.log)和慢查询日志(需开启SQLTRACE参数),找出性能瓶颈(如慢查询、锁等待)。UPDATE STATISTICS更新统计信息;每月执行REBUILD INDEX重建碎片化索引;清理无用临时表(DROP TABLE temp_table)和过期数据,释放存储空间。