更新时间:2026-08-06 GMT+08:00
分享

常见问题

  • Q:为什么使用高级压缩之后,gs_adm_ilmresults系统表中显示有spaceSaving不为0,但是\d+查看表大小没有变化?

    A:高级压缩方案为区分冷热的页内压缩,可以简单理解为将一个盒子内物品进行挤压,使得剩余可用空间变多了,但是盒子大小没变,还是占用这么大的空间;因此只有再次往表中插入数据中,才能复用这些空间,故高级压缩更适合需要冷热分离,业务还会继续增长的场景。

  • Q:为什么手动调度了好几次接口,查看gs_adm_ilmresults系统表中spaceSaving都显示的0?

    A:

    1. 查看gs_ilm_param系统表中,idx11参数是否设置为了1,在手动测试场景下需将该参数设为1,将冷热数据判定时间的阈值从天变为秒级别,非测试场景不建议修改此参数。
    2. 如果1设置正确,检查gs_adm_ilmresults系统表中StartBlkNum是否再次从0开始,若没有,则说明第一次遍历全表页面还未完成(手动压缩第一次遍历需给页面标记时间戳,再次压缩到该页面时可能才会有收益),可以将gs_ilm_param系统表中idx13的数值调大一些,将单次压缩任务的大小进行适当的调整。
    3. 12都检查无误,spaceSaving还是多次显示为0,则说明该表数据可能不适合压缩,几乎没有收益。
  • Q:经数据压缩之后,数据是否可以进行解压还原为原状态?

    A:一旦经过压缩处理,数据无法还原,页面物理状态将一直为压缩态,故若要使用真实业务表数据进行压缩测试时,一定要提前做好数据备份。

  • Q:为什么已经设置enable_ilm = on了,还要在database中alter database set ilm =on?

    A:enable_ilm这个guc参数是用来控制压缩功能是否开启和关闭的,只用来控制是否开启压缩功能的实例级参数,这个参数不会影响已压缩的数据。alter database set ilm = on;这个语句用于开启某个数据库的压缩功能,如果你想在某个库里使用压缩,就需要执行这个sql语句,是库级别的。

  • Q:如何关闭压缩功能?

    A:可使用DBE_ILM_ADMIN.DISABLE_ILM()关闭自动调度压缩,若是要彻底关闭功能则将guc:enable_ilm设置为off(注:已压缩的数据即使关闭了压缩功能,也不会解压还原)。

  • Q:什么业务场景适合使用高级压缩?

    A:高级压缩更加适合数据能够区分冷热,要求对性能影响较小,且数据会持续增长的业务场景。

  • Q:如何计算压缩比?

    A:可准备一份备份数据,建表插入数据后,记录表大小size1;确保全表压缩完毕后,再次往表内插入相同数据,记录表大小size2。压缩比即为size1/(size2-size1)。

  • Q:高级压缩和透明压缩的区别是什么?如何选择?

    A:高级压缩是页内行级别的压缩,压缩后能在有限的页面内存储更多的行,压缩完毕的空间在后续的插入数据中能得到使用,即物理磁盘已经占用的空间大小并不会减少;相对于跨页透明压缩压缩率偏小,性能影响较小,适用于温热的数据,数据还会增长的场景。透明压缩则是页内逻辑完全不动,支持跨页压缩,在物理文件层面实现多页压缩,压缩完毕后使用更小的物理块存储,压缩率相对较高,有一定的性能损失,适用于冷数据,不经常改动的数据;相比于高级压缩,压缩后的空间能立马释放出来,物理磁盘空间相比于未压缩时会减少。

  • Q:自动调度压缩什么时候开启?

    A:上述操作步骤仅为测试压缩功能时使用,正常业务场景使用时,创建维护窗口并CALL DBE_ILM_ADMIN.ENABLE_ILM()后,调度任务默认会在每天的北京时间22:00至次日凌晨2:00开启,每隔15分钟调度一次压缩任务(为了降低压缩对业务的影响,在业务低峰期进行调度任务)。

相关文档