IDS 11 数据压缩和存储优化

来源:互联网 发布:ipad淘宝搜索店铺 编辑:程序博客网 时间:2024/04/28 21:23

 

IDS 11 数据压缩和存储优化
* 11.50.xC4版本开始IDS具有该特性
概述
IDS通过对表及分片表进行数据压缩来减少磁盘存储空间,在进行压缩操作前,可以对压缩率进行提前估算,从而做到有针对性的有效压缩。同时支持对表的数据空间进行归并整理,可以实现对通过数据压缩和归并整理优化出来的空间进行释放到dbspace,从而实现最大限度的存储优化能力。
为什么要进行数据压缩?
日益信息化的世界里,充满着各种各样的数据,人们通过大量的存储设备来存储自己需要的各种数据信息,在实现世界中,信息的增长速度越来越快,存储设备开销占信息化管理成本比重越来越大,同时存储设备需要大量的电力来冷却存储设备及设备的运行。在如今激烈竞争的商业时代,如何为企业降低运行成本;在如今能源紧缺的今天,节约用电已是我们每个人都需要努力的目标。数据库存储了大部分企业的数据,因此对数据库的数据进行压缩,无疑能为企业节省一笔不菲的开支。有相关调查统计数据表明,一个10T的数据库一年运行成本为200万人民币。如果采用数据库压缩技术,把数据压缩40%,这样我们就能从中节省80万人民币。
IDS数据压缩技术
A.IDS数据库在数据压缩后的好处
  -极大地节省了磁盘存储空间
  -极大地减少了逻辑日志的使用,有效地防止高负载OLTP系统逻辑日志瓶颈问题
  -更少的page读,因为更多的数据行可以存储在同一个page上
  -更少的buffer pool
  -更少的I/O
  -对时间较的数据进行压缩,对近期频繁访问的数据不进行压缩
  -释放出压缩后不在使用的空间
  -更少的备份空间,更短的数据库备份与恢复时间
B.行(row)压缩算法概念
压缩算法在整个数据表(table)中寻找重复的模式(pattern),当模式被找到时,字符串被一个12比特(bit)的符号替代.符号被存储于一个数据字典中以供快速查找,在数据页(page)中数据是被压缩的 (不管是在硬盘上还是在缓冲池里)
显著的节省了输入输出的带宽– 更好的性能
显著地节省了内存空间– 更有效的内存使用
一些中央处理器(CPU)的额外开销
行(row)数据被处理前必须先被解压缩
可被压缩的表格被压缩后通常能节省60%到80%的空间
整个数据库的存储空间将被节省40%到50%
这意味着只要50%的磁盘空间就能够支持IDS11数据库!
C.压缩操作
  IDS压缩操作,对表、或者对分片表的某一个分片进行压缩操作。
  压缩过程包括几个步骤,每个步骤详细说明如下:
  * 每个操作在sysadmin数据库中运行,对于分片表,我们可以对整个表或者表的某一个分片进行压缩操作
  (1).压缩率评估
   IDS采用row压缩技术,通过替代位来代表重复的模式(pattern),和我们正常的文件压缩技术类似,如果数据重复率低,则压缩率较低,这种情况下,我们对表进行压缩会带来负面的影响。所以我们要对压缩率较高的表进行压缩。
   对整个表
   EXECUTE FUNCTION task("table estimate_compression","table_name", "database_name", "owner_name");
   对分片表的某一个分片
   EXECUTE FUNCTION task("fragment estimate_compression","partnum_list");
  (2). 创建压缩字典
   由于IDS压缩技术通过搜索重复模式(pattern)来实现压缩,所以在压缩前需要创建压缩字典表,该表存放表中已有重复的模式,所以要求表中至少有2K记录才可以进行压缩操作。对于记录数较大的表,通过sample抽取重复模式。当创建完成压缩字典后,后来insert的记录将采用此模式进行压缩,我们可以重新创建字典,然后再进行新的压缩。所以一般情况下,我们建议对新增记录较少情况下的表或者分片进行压缩比较合理。
   对整个表
   EXECUTE FUNCTION task("table create_dictionary", "table_name","database_name", "owner_name");
   对分片表的某一个分片
   EXECUTE FUNCTION task("fragment create_dictionary", "partnum_list");
  (3). 压缩数据
   如果没有进行上一步创建压缩字典,该操作在做前将自动触发创建压缩字典操作
   对整个表
   EXECUTE FUNCTION task("table compress", "table_name","database_name", "owner_name");
   对分片表的某一个分片
   EXECUTE FUNCTION task("fragment compress", "partnum_list");
  (4). 整理存储空间
   对于压缩后释放的空间进行空间整理,对于非压缩表也可以进行该操作,可以简单的理解为我磁盘碎片整理操作
   对整个表
   EXECUTE FUNCTION task("table repack", "table_name","database_name", "owner_name");
   对分片表的某一个分片
   EXECUTE FUNCTION task("fragment repack_offline", "partnum_list");
  
  (5). 释放存储空间
   对于表占用但尚未存放数据的空间,通过上一步后,可以把该空间释放出来到dbspace
   对整个表
   EXECUTE FUNCTION admin("table shrink", "table_name","database_name", "owner_name");
   对分片表的某一个分片
   EXECUTE FUNCTION task("fragment shrink", "partnum_list");
  
  (6). 解压
   如果我们需要把已经压缩的表不在压缩,我们就需要进行解压操作。解压操作可以进行online和offline操作,当采用online模式,将不影响表的正常访问,但采用offline模式解压速度较快
   对整个表
   EXECUTE FUNCTION task("table uncompress", "table_name","database_name", "owner_name");
   或者offline
   EXECUTE FUNCTION admin("table uncompress_offline","table_name", "database_name", "owner_name");
   对分片表的某一个分片
   EXECUTE FUNCTION task("fragment uncompress", "partnum_list");
   或者offline
   EXECUTE FUNCTION task("fragment uncompress_offline", "partnum_list");
 D.压缩操作举例
   IDS除了提供如上所示的API方式,同时提供了OAT可视化操作界面,操作起来更加便捷。详细情况请查阅OAT相关说明问题。
   正常情况下,我们对一个表进行压缩操作,不需要严格按照上面所描述的压缩操作的顺序来进行,其中创建压缩字典表包含在压缩操作中,在进行压缩操作时,数据库发现没有对应的压缩字典表,立即进行创建压缩字典,然后进行数据压缩操作。一个一般的压缩操作流程如下:
   (1). 压缩评估
        EXECUTE FUNCTION task("table estimate_compression","table_name", "database_name", "owner_name");
   (2). 压缩
        EXECUTE FUNCTION task("table compress", "table_name","database_name", "owner_name");
   (3). 空间整理与释放
        EXECUTE FUNCTION task("table repack", "table_name","database_name", "owner_name");
         若要释放空间情况
         EXECUTE FUNCTION admin("table shrink", "table_name","database_name", "owner_name");
  

  
了解更多信息请查看:
IDS在线文档
http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp
Informix Dynamic Server 数据压缩和存储优化
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0904idsoptimization/?S_TACT=105AGX52&S_CMP=tec-csdn
   
原创粉丝点击