温馨提示×

Ubuntu Informix如何进行数据压缩与解压

小樊
35
2025-12-17 02:42:43
栏目: 智能运维

Ubuntu 上 Informix 数据压缩与解压实用指南

一 场景与方式概览

  • 表级/分片级行数据压缩与解压:在数据库内部对表或分片启用压缩、评估压缩收益、执行压缩/解压,并可结合重组回收空间。适用于在线业务数据降本增效。
  • 操作系统层面的备份压缩与解压:使用 dbexport/dbimport 导出为文本后,用 tar/gzip 等工具打包压缩,便于迁移与长期归档。适用于跨环境迁移、冷备份与离线保存。

二 表级与分片级压缩与解压

  • 前提条件
    • 连接 sysadmin 数据库(默认仅 informix 可连),并具备 DBSA 权限。
  • 估算压缩收益
    • 估算整表:EXECUTE FUNCTION task(“table estimate_compression”, “table_name”, “database_name”, “owner_name”);
    • 估算分片:EXECUTE FUNCTION task(“fragment estimate_compression”, “partnum_list”);
    • 输出包含:估算压缩率、当前压缩率、可节约百分比、分区号等,用于判断是否需要压缩或重压缩。
  • 执行压缩
    • 一键压缩并回收碎片:EXECUTE FUNCTION task(“table compress repack shrink”, “tabname”, “dbname”, “owner”);
    • 仅压缩(不回收):EXECUTE FUNCTION task(“table compress”, “tabname”, “dbname”, “owner”);
  • 解压
    • 在线解压:EXECUTE FUNCTION task(“table uncompress”, “tabname”, “dbname”, “owner”);
    • 离线解压(维护窗口):EXECUTE FUNCTION task(“fragment uncompress_offline”, “partnum”);
  • 重组与空间回收
    • 离线重组:EXECUTE FUNCTION task(“table repack_offline”, “tabname”, “dbname”, “owner”);
    • 收缩空间:EXECUTE FUNCTION task(“table shrink”, “tabname”, “dbname”, “owner”);
  • 按分片操作
    • 获取分片号:
      • SELECT a.tabname, b.dbspace, b.partn AS partnum, b.exprtext FROM systables a, sysfragments b WHERE a.tabid = b.tabid AND a.tabname = ‘your_table’;
    • 压缩某分片:EXECUTE FUNCTION admin(“fragment compress”, “partnum”);
    • 重组并收缩分片:EXECUTE FUNCTION task(“fragment repack shrink”, “partnum”);
  • 使用提示
    • 压缩/解压会消耗 CPU,建议在低峰期执行;压缩后建议执行 repack shrink 回收碎片。
    • 对大表可先按分片评估与压缩,降低一次性资源占用。

三 操作系统层面的备份压缩与解压

  • 导出与压缩
    • 导出:dbexport -o /path/to/exp dbname
    • 打包压缩:tar czvf dbname.tar.gz /path/to/exp
  • 解压与导入
    • 解压:tar zxvf dbname.tar.gz
    • 导入:dbimport -c -i /path/to/exp dbname
  • 说明
    • 该方式便于跨平台迁移与长期归档;导入前确保目标环境 dbspace日志模式 已准备就绪。

四 常用命令速查表

目标 命令示例
估算表压缩收益 EXECUTE FUNCTION task(“table estimate_compression”, “t1”, “db1”, “owner”);
估算分片压缩收益 EXECUTE FUNCTION task(“fragment estimate_compression”, “0x00300002”);
压缩并回收空间 EXECUTE FUNCTION task(“table compress repack shrink”, “t1”, “db1”, “owner”);
仅压缩 EXECUTE FUNCTION task(“table compress”, “t1”, “db1”, “owner”);
在线解压 EXECUTE FUNCTION task(“table uncompress”, “t1”, “db1”, “owner”);
离线解压分片 EXECUTE FUNCTION task(“fragment uncompress_offline”, “14680071”);
离线重组分片 EXECUTE FUNCTION task(“table repack_offline”, “t1”, “db1”, “owner”);
收缩空间 EXECUTE FUNCTION task(“table shrink”, “t1”, “db1”, “owner”);
导出与压缩备份 dbexport -o /exp/db1; tar czvf db1.tar.gz /exp/db1
解压与导入恢复 tar zxvf db1.tar.gz; dbimport -c -i /exp db1

五 实践建议

  • 先做压缩收益评估(estimate_compression),再决定是否压缩或重压缩;对大表按分片逐步执行,降低峰值资源占用。
  • 压缩/解压与重组均建议在维护窗口进行,并关注 CPUI/O;压缩完成后执行 repack shrink 回收空间。
  • 操作系统级备份压缩适合迁移与归档;导入前检查目标 dbspace日志模式,避免创建到 rootdbs 或日志模式不符。

0