Linux 上监控 Informix 性能的实用技巧
一 监控分层与常用工具
- 建议采用分层监控:系统层、数据库引擎层、SQL 与应用层,形成闭环。
- 系统层常用命令
- top / vmstat 1 / iostat -x 1 / sar -u 1 / netstat -an:快速定位 CPU、内存、I/O、网络 的瓶颈与异常波动。
- 数据库引擎层常用命令
- onstat:查看共享内存、会话、锁、I/O、检查点、LRU 等实时状态;配合 onmode 做运行模式与参数查看/调整;onbar 关注备份进度与状态。
- 图形化与平台化
- IBM Monitoring and Management Extension(IMMX)、Informix Performance Monitor(IPM)/Informix Enterprise Monitor(IEM)、Zabbix、Prometheus 等,用于长期趋势、告警与可视化。
二 关键指标与快速检查
- 用 onstat -p 观察整体负载与命中率:关注 bufreads/bufwrites、diskreads/diskwrites、lockwaits、deadlks、seqscans 等;当 seqscans 与 diskreads 同时偏大,往往意味着存在大表顺序扫描,需要结合执行计划优化索引。
- 用 onstat -g ses 与 onstat -g sql 定位会话与正在执行的 SQL;配合 sysmaster:sysprofile 查看自上次清零后的累计指标,便于评估一段时间内的行为变化。
- 用 onstat -d 检查 DBSpace 使用率与剩余空间,提前识别空间紧张与潜在扩容需求。
- 用 onstat -l 关注锁与等待,配合 onstat -k 细化锁类型与等待链,快速判断是否因锁冲突导致吞吐下降。
- 用 onstat -m 与数据库日志(如 online.log)捕捉错误、检查点异常、长事务与归档/恢复事件,作为问题根因的重要线索。
三 用 SQL 和系统表做深度监控
- 实例运行概况(自启动或上次 onstat -z 以来的累计统计)
- 关键字段:sh_boottime、sh_longtx、sh_maxlocks、sh_nlrus 等,用于评估运行时间与结构性上限。
- 示例:
- select dbinfo(‘UTC_TO_DATETIME’,sh_boottime) start_time,
current year to second - dbinfo(‘UTC_TO_DATETIME’,sh_boottime) run_time,
sh_maxchunks, sh_maxdbspaces, sh_maxuserthreads, sh_maxtrans,
sh_maxlocks, sh_nlrus, sh_longtx,
dbinfo(‘UTC_TO_DATETIME’,sh_pfclrtime) onstat_z_running_time
from sysmaster:sysshmvals;
- 会话与等待事件
- 会话概览(含空闲时间)与等待标记(如 is_wlatch、is_wlock、is_wbuff、is_wckpt),用于识别连接风暴与锁/缓冲等待。
- 示例:
- select s.sid, s.username, s.hostname, q.odb_dbname database,
dbinfo(‘UTC_TO_DATETIME’,s.connected) connection_time,
dbinfo(‘UTC_TO_DATETIME’,t.last_run_time) last_run_time,
current-dbinfo(‘UTC_TO_DATETIME’,t.last_run_time) idle_time
from syssessions s, systcblst t, sysrstcb r, sysopendb q
where t.tid = r.tid AND s.sid = r.sid AND s.sid = q.odb_sessionid
order by 7 desc;
- 正在执行与慢 SQL
- 直接从 sysmaster:syssqexplain 关联会话,筛出目标表或高成本 SQL;对“当前最慢”按 sqx_estcost 排序,对“一段时间内最慢”建议启用 SQLTRACE 后分析 syssqltrace。
- 示例(当前高成本 SQL):
- select first 25 sqx_estcost, sqx_estrows, sqx_sqlstatement
from sysmaster:syssqexplain
order by sqx_estcost desc;
- DBSpace 使用率
- 以更友好的格式汇总 总大小、空闲、使用率、页大小、Chunk 数,便于容量预警与扩容评估。
四 SQL 执行计划与慢 SQL 捕获
- 使用 SET EXPLAIN 获取查询计划与成本,判断是否存在 顺序扫描、索引扫描、哈希连接/嵌套循环 等不优选择;必要时用 AVOID_EXECUTE 仅生成计划而不执行,避免对线上造成影响。
- 示例:
- SET EXPLAIN ON AVOID_EXECUTE;
- SELECT …
- 使用 SQLTRACE 捕获一段时间内慢 SQL,按 sql_totaltime 排序定位 Top N 问题语句;注意开启会带来约 2%–5% 的性能开销,分析完成后及时关闭或转存结果。
- 示例:
- 开启:echo ‘execute function task(“set sql tracing on”,100000,“1k”,“low”,“demodb”);’ | dbaccess sysadmin
- 关闭:echo ‘execute function sysadmin:task(“SET SQL TRACING OFF”);’ | dbaccess sysadmin
五 告警阈值与自动化实践
- 建议的告警阈值与动作(需结合业务基线微调)
- 缓冲区命中率(读)低于 95%:检查索引与 SQL,评估 LRU/FETCH 参数与缓冲池大小。
- lockwaits 持续增长或 deadlks > 0:定位阻塞链与会话,优化事务粒度与访问路径。
- seqscans 与 diskreads 同步走高:优先优化缺失/失效索引与统计信息,改写 SQL 避免大表全扫。
- DBSpace 使用率 > 80%:提前扩容或清理历史数据,避免空间耗尽导致宕机。
- 检查点异常频繁或日志切换过快:评估 CKPTINTVL、LRU 与 I/O 能力,必要时调整参数或迁移热点数据。
- 自动化与可视化
- 用 Zabbix/Prometheus 采集 onstat 输出与系统指标,配置触发器与趋势面板;结合 IMMX/IEM 做企业级统一监控与报表。