日志是故障排查的核心线索,需重点检查系统日志与Informix专用日志:
dmesg查看内核消息(如硬件错误、驱动加载失败),检查/var/log/messages、/var/log/syslog、/var/log/kern.log中与Informix相关的错误(如进程崩溃、权限问题);onstat -l查看逻辑日志状态(是否满、是否需要备份),使用grep "ERROR" /var/log/informix/dbserver.log过滤数据库错误(如SQL语法错误、连接失败),结合时间戳关联系统日志与数据库日志,快速定位问题根源。使用Informix自带工具onstat获取实时运行信息,覆盖性能瓶颈、资源占用、锁冲突等场景:
onstat -(显示数据库服务器基本信息,如版本、运行模式);onstat -u(查看锁等待、长事务,识别阻塞会话)、onstat -g ses <session_id>(分析具体会话的SQL执行情况);onstat -x(检查事务的逻辑日志起始位置,定位未备份的长事务);onstat -d(查看chunk状态,若flag为down则说明存储设备异常,需检查磁盘权限或硬件)。现象:数据库停止接受写入,报“Logical log full”错误。
解决方法:
onstat -x显示“Last log backup”时间过久);onparams -a -d <DBspace> -s <size> -i(如onparams -a -d rootdbs -s 100000 -i添加100MB逻辑日志);现象:应用报“Lock wait timeout exceeded”或“Deadlock detected”,onstat -u显示大量“wait”状态会话。
解决方法:
onstat -g ses <blocking_session_id>找到阻塞者,用kill -9 <PID>终止(谨慎操作,避免影响业务);SET ISOLATION TO DIRTY READ降低隔离级别(适用于读多写少场景),或修改表默认锁类型(如ALTER TABLE <table> LOCK MODE ROW改为行级锁)。现象:应用报“I/O error”或onstat -d显示chunk状态为down。
解决方法:
df -h确认磁盘未满(若满则清理临时文件或扩展磁盘);dd if=/dev/<chunk_device> of=/dev/null bs=1M count=100测试磁盘读取(若失败则联系硬件运维);informix)对chunk目录有读写权限(chown -R informix:informix /path/to/chunk)。现象:oninit进程无法启动,报“Cannot initialize shared memory”或“Invalid onconfig file”。
解决方法:
onconfig配置:确认ROOTPATH(rootdbs路径)、MSGPATH(日志路径)、SHMVIRTSIZE(共享内存初始大小)等参数正确(如ROOTPATH需指向存在的目录);ipcs -m查看是否有残留的Informix共享内存段(若有则用ipcrm -m <shmid>删除);netstat -tulnp | grep <Informix_port>(如默认1526端口)确认端口未被其他进程占用。onstat、top、iostat监控CPU、内存、磁盘I/O,识别瓶颈(如高CPU使用率可能需优化SQL,高磁盘I/O可能需调整索引);set explain分析查询计划(如未走索引则添加索引,CREATE INDEX idx_name ON table(column)),避免全表扫描;onbar或ontape备份(如每日增量备份+每周全量备份),测试备份可用性(如onbar -r恢复测试);onconfig参数(如BUFFERS设置为内存的1/4、LRUS设置为32)、sqlhosts文件(网络配置正确)、环境变量($INFORMIXDIR、$ONCONFIG、$LD_LIBRARY_PATH设置正确)。