1. 收集基础信息
首先确认系统与数据库进程状态,使用ps -ef | grep informix查看oninit(数据库引擎)、onstat(监控工具)、dbaccess(客户端工具)等关键进程是否运行;通过top/htop监控CPU、内存占用,df -h检查磁盘空间(确保/opt/informix、/var/log等目录有足够空间);查看系统日志(/var/log/messages、/var/log/syslog、dmesg)和Informix专用日志(/var/log/informix/*.log、/opt/informix/log/*.log),获取错误时间戳及描述(如“Logical log full”“Lock timeout”)。
2. 使用Informix专用工具诊断
onstat命令:实时监控数据库状态,常用场景包括:
onstat -l:检查逻辑日志状态(若所有日志flags为U------,说明逻辑日志满);onstat -u:查看会话信息(识别锁等待、长事务,如-243/-244锁错误对应的会话ID);onstat -d:检查chunk状态(若flags为down,说明存储设备I/O失败);onstat -g act:查看活跃会话(定位高负载SQL);onstat -g ses <session_id>:深入分析特定会话的SQL执行、锁持有情况。onmode命令:应急调整数据库模式,如onmode -z <session_id>终止导致死锁的会话;onmode -m切换至单用户模式(用于修复严重损坏)。oncheck命令:检查数据库一致性,如oncheck -p <dbname>检查物理结构(表空间、chunk),oncheck -u <dbname>检查逻辑结构(表、索引)。3. 常见故障排查与处理
onstat -l显示所有日志未备份。ontape/onbar是否正常);② 若日志包含活动事务(onstat -x查看beginlg),需等待事务结束或回滚;③ 若日志包含检查点信息(flags最后一位为L),需完成检查点;④ 使用onparams -a -d <dbspace> -s <size> -i(IDS 9.3+)在线添加新日志(无需0级备份)。-243(无法定位表行)、-244(无法物理读取)等错误,onstat -u显示“Lock wait”状态。onstat -u找出锁拥有者(owner字段)及等待者(waiter字段);② 优化SQL(减少全表扫描、添加索引)缩短事务时长;③ 调整隔离级别(如使用dirty read降低锁争用);④ 设置锁等待超时(LOCKMODE参数,默认WAIT,可改为NOWAIT立即报错);⑤ 终止问题会话(onmode -z <session_id>)。onstat -d显示对应chunk flags为down。dd if=<chunk_path> of=/dev/null bs=2048k测试存储设备可读性(仅读操作);② 检查设备权限(chown informix:informix <chunk_path>,chmod 660 <chunk_path>);③ 确认设备是否存在(ls -l <chunk_path>);④ 修复后用onspaces -s <dbspace> <chunk_name>恢复chunk状态。onstat -g ses找出高负载会话及对应SQL;② 用onstat -g sql分析SQL执行计划(检查是否缺少索引);③ 调整缓冲池参数(BUFFERS设为内存1/4,LRUS=32,LRU_MAX_DIRTY=2/LRU_MIN_DIRTY=1);④ 增加CLEANERS数量(根据磁盘数目调整,通常每块磁盘1个);⑤ 优化CHKPTINTVL(检查点间隔,默认1分钟,可根据负载调整)。4. 预防与维护
ontape或onbar进行全量/增量备份(每日全量、每小时增量),并测试备份可用性;logrotate(/etc/logrotate.d/informix)每日轮转日志,保留7天压缩备份(避免日志占满磁盘);onstat -g stats收集性能统计数据,每月执行oncheck -p检查物理结构,每季度重建索引(针对高频查询表)。