在配置Informix内存前,需先明确系统可用内存,避免数据库占用过多内存导致系统交换(swap)或进程崩溃。
free -h命令查看物理内存、交换分区及已用/剩余内存情况,确保系统有足够空闲内存(建议剩余内存不低于总内存的20%)。top(实时查看进程内存占用)、vmstat(监控虚拟内存、I/O及CPU活动)、pmap(查看进程内存映射)等命令,持续跟踪系统内存变化,识别内存瓶颈或泄漏。Informix的内存配置主要通过实例目录下的onconfig文件(如INFORMIXDIR/etc/onconfig.dbserver_name)实现,关键参数及调整逻辑如下:
共享内存段配置:
SharedMemSize:共享内存大小,用于数据库服务器与客户端通信、缓冲池等核心功能。建议根据系统内存分配(如200MB起步,大型数据库可调整至GB级),需满足BUFFERS(缓冲池)等子参数需求。SHMVIRTSIZE:共享内存虚拟段的初始大小(单位:KB),用于存放用户线程信息及对话数据。建议设置为SharedMemSize的10%-20%(如SharedMemSize=200MB时,SHMVIRTSIZE=20-40MB)。SHMADD:共享内存虚拟段不足时的增量(单位:KB),建议设置为SHMVIRTSIZE的1-2倍(如SHMVIRTSIZE=20MB时,SHMADD=20-40MB)。SHMTOTAL:共享内存总大小限制(0表示无限制),建议设置为系统可用内存的70%-80%(如系统有16GB内存,可设为12GB)。内存池与缓存参数:
BUFFERS:缓冲池大小(单位:页,默认12KB/页),是Informix性能最关键的参数之一。用于缓存数据页,减少磁盘I/O。建议初始值为物理内存×50%÷12KB(如16GB内存可设为600,000页),后续根据onstat -b(缓冲池命中率)调整(命中率低于80%时需增大)。LockMemSize:锁管理内存大小(单位:KB),用于数据库锁定机制。建议设置为10MB-20MB(如10485760),若并发事务多可适当增加。TempMemSize:临时内存大小(单位:KB),用于排序、哈希操作。建议设置为50MB-100MB(如52428800),大型查询多时可增大。SortMemSize/HashMemSize:排序/哈希内存大小(单位:KB),分别用于排序操作和哈希操作。建议与TempMemSize保持一致(如52428800),避免排序溢出到磁盘。虚拟处理器(VP)配置:
NUMCPUVPS:CPU虚拟处理器(CPU VP)数量,决定查询扫描线索数。建议设置为物理CPU核心数的70%-80%(如4核CPU设为3),多处理器环境下不超过物理核心数。NUMAIOVPS:异步I/O虚拟处理器(AIO VP)数量,用于提升磁盘I/O性能。建议设置为物理磁盘数(如4块磁盘设为4),若使用RAID卡可适当减少。大页内存可减少共享内存的映射表大小,提升内存访问效率,尤其适合大型Informix数据库。
cat /proc/sys/vm/nr_hugepages。echo 1024 > /proc/sys/vm/nr_hugepages(如分配1024个2MB大页,共2GB)。/etc/sysctl.conf,添加vm.nr_hugepages=1024,执行sysctl -p生效。onconfig中启用大页:USE_HUGE_PAGES=1。HUGEPAGES_SIZE=2097152(2GB,单位:KB)。onstat -b中的Buffer Hit Ratio(缓冲池命中率),若低于80%,需逐步增大BUFFERS(每次增加10%-20%),直到命中率稳定在85%以上。BUFFERS过大导致共享内存溢出,需结合SHMTOTAL限制。LRUS:LRU队列数量,建议设置为BUFFERS/1000(如BUFFERS=600,000时,LRUS=60),范围在32-64之间。LRU_MAX_DIRTY:LRU缓存中允许的最大脏页比例(百分比),建议设置为50-70(如50),避免脏页过多导致写性能下降。onconfig后,执行onmode -k shutdown关闭实例,再执行onmode -k autorestart自动重启(或手动启动)。onstat -m查看内存参数配置是否与onconfig一致。onstat -g seg查看共享内存段状态,确认共享内存大小、映射情况。onstat -b查看缓冲池命中率,确认缓冲池性能是否符合预期。