温馨提示×

Linux Informix数据库如何进行定期维护

小樊
34
2025-12-12 23:23:26
栏目: 智能运维

Linux 上 Informix 定期维护清单

一 备份策略与执行

  • 备份类型与级别
    • 采用分级备份:0级(全量)1级(自上次0级增量)2级(自上次1级增量),用于平衡RTO/RPO与资源占用。
    • 工具选择:
      • ontape:内置支持0/1/2级备份与逻辑日志备份,适合中小规模与标准化环境。
      • onbar:企业级并行备份,支持更细粒度与时间点恢复(PITR)
      • dbexport/dbunload:逻辑导出/导入,便于迁移与重建;onunload/onload为二进制卸数/装数,性能更高。
  • 典型周期建议
    • 每周一次0级备份;每日一次1级或2级增量备份;逻辑日志持续或定时归档,确保空间可循环。
  • 自动化与验证
    • 使用cron定时执行备份脚本,保留最近N份校验信息;定期做恢复演练/抽样恢复验证可用性。
  • 示例(ontape 0级与逻辑日志连续归档)
    • 0级备份:ontape -s -L 0 -d <dbspace|all>
    • 逻辑日志连续归档:ontape -c(确保 LTAPEDEV 指向有效设备或目录,勿指向 /dev/null 在生产环境)
  • 注意
    • 变更日志模式(如无日志→日志)前先评估停机与回滚方案;备份窗口避开业务高峰。

二 日志管理(物理日志与逻辑日志)

  • 关键命令与状态
    • 查看状态:onstat -l(关注 flags、used%、current 等);物理/逻辑日志空间不足会阻塞业务。
  • 物理日志
    • 作用:保存页的before image,用于快速恢复;空间需连续
    • 调整(需进入维护态/quiescent):onparams -p -s -d -y
  • 逻辑日志
    • 作用:记录事务REDO/UNDO与DDL/检查点;数量≥3,总空间=logsize × logfiles(初始化时设定,运行中可增删移动)。
    • 动态管理:onparams -a/-d/-l 增加/删除/切换日志;新增日志需做一次0级备份后方可使用。
    • 归档与循环:通过 ontape -a(自动)/ -c(连续)归档到磁带/目录;归档后日志标记为U-B可复用,避免“日志满”导致停写。
  • 模式选择
    • 建库时可选:WITH LOG(无缓冲日志)WITH BUFFERED LOGWITH LOG MODE ANSI;OLTP 建议开启日志(无缓冲或 ANSI)以保障一致性。

三 空间与存储维护

  • dbspace 与 chunk
    • 创建/扩容:onspaces -c -d -p -o -s onspaces -a -p -o -s
    • 规划要点:将rootdbs仅用于系统元数据;为数据/索引/临时表分别规划 dbspace;临时 dbspace(如 tmpdbs)应在实例初始化前创建并指定用途。
  • 空间监控与阈值
    • 定期查询 sysmaster:sysdbspaces/syschunks 统计已分配/空闲与使用率%,对**>80%**的 dbspace 预警并扩容或迁移对象。
  • 碎片与对象布局
    • 检查表/索引的 extent 数量索引层数(levels),减少过度碎片与高扇出;必要时重建表/重组索引并重分布。
  • I/O 均衡
    • 基于 sysmaster:syschkio 分析各 chunk 的读写,调整大表/大索引到不同磁盘/阵列以均衡 I/O。

四 性能与统计信息维护

  • 统计信息
    • 定期执行 UPDATE STATISTICS,确保优化器生成最优执行计划;对大表/高频查询对象优先更新。
  • 索引维护
    • 高碎片/高层数/低效选择性的索引进行重建或重组;避免冗余与覆盖度低的索引。
  • SQL 与访问路径
    • 避免 SELECT ,优先覆盖索引合适的 JOIN*;用执行计划与监控定位全表扫描与高成本操作。
  • 内存与缓冲
    • 结合负载调优 缓冲池/日志缓冲 等参数,避免频繁检查点与日志等待;关注 LRU/脏页比例
  • 系统监控
    • 使用 onstat 观察会话、锁、I/O、检查点等;配合 top/vmstat/iostat 等 OS 工具定位瓶颈。

五 健康检查与日常巡检脚本

  • 建议以 informix 用户建立每日/每周巡检任务(cron),汇总并告警。
  • 示例 SQL(在 sysmaster 上执行)
    • 各 dbspace 使用率
      • select name dbspace, sum(chksize) allocated, sum(nfree) free, round(((sum(chksize)-sum(nfree))/sum(chksize))*100,2) “%used” from sysdbspaces d, syschunks c where d.dbsnum=c.dbsnum group by name order by 4 desc;
    • 各 dbspace I/O
      • select d.name, f.fname path_name, sum(pagesread) diskreads, sum(pageswritten) diskwrites from syschkio c, syschunks k, sysdbspaces d where d.dbsnum=k.dbsnum and k.chknum=c.chunknum group by 1,2 order by 3 desc;
    • 表级 I/O 排行
      • select dbsname, tabname, (isreads+pagreads) diskreads, (iswrites+pagwrites) diskwrites from sysptprof order by 3 desc,4 desc limit 20;
    • 表 extent 数量(>30 建议重建/调整 extent size)
      • select t.tabname, count() num_ext from sysextents e, systables t where e.tabnum=t.tabnum and t.tabname not like ‘sys%’ group by 1 having count() > 30 order by 2 desc;
    • 索引层数(levels 越少越好)
      • select idxname, levels from sysindexes order by 2 desc limit 20;
  • 建议同时巡检
    • 逻辑日志使用率与归档状态(onstat -l)、长事务、锁等待、检查点频率、备份成功率与可用恢复点。

0