
# 常见问题
- 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. 若[1]、[2]都检查无误，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分钟调度一次压缩任务（为了降低压缩对业务的影响，在业务低峰期进行调度任务）。
  
 
