[DB2]数据库设计:取得最佳性能的准则 (6)

发表于:2007-05-26来源:作者:点击数: 标签:
5. 数据压缩 DB2提供了压缩一个表空间或分区中的数据的能力。这是通过在CREATE TABLESPACE语句中指定COMPRESS YES选项,然后对表空间执行LOAD或REORG实用程序来实现的。通过用较短的字符串替换经常出现的长字符串,可以压缩数据。这时会建立一个字典,其中包
5. 数据压缩

 

 

  DB2提供了压缩一个表空间或分区中的数据的能力。这是通过在CREATE TABLESPACE语句中指定COMPRESS YES选项,然后对表空间执行LOAD或REORG实用程序来实现的。通过用较短的字符串替换经常出现的长字符串,可以压缩数据。这时会建立一个字典,其中包含了映射原始的长字符串与它们的替换值的信息。

 

 

  在数据被存储之前压缩数据,以及在从外部存储设备读出数据时将数据解压,这都需要使用一定的CPU资源。但是,数据压缩也可以为性能带来好处,因为可以在更少的空间(包括DASD和缓冲池中的空间)中存储更多的数据,与未压缩的数据相比,这样可以减少同步读,减少I/O等。

 

 

  在决定是否压缩一个表空间或分区时,要考虑下面一些事情:

 

 

  1) 行的长度:行的长度越大(尤其是它接近页宽时),压缩的效率就越低。在DB2中,行不能跨页,您可能无法实现足够的压缩来使一页可以容纳多行。

 

 

  2) 表的长度:对于更大的表空间,压缩更为有效。对于非常小的表,压缩字典的大小(8KB到64KB)有可能会抵消掉通过压缩所节省出来的空间。

 

 

  3) 数据中的模式:对于特定的表空间或分区,数据中重复出现的模式的出现频率将决定压缩的效果。有大量重复字符串的数据有巨大的压缩潜力。

 

 

  4) 对压缩的估计:DB2提供了一个独立的实用程序DSN1COMP,通过执行该实用程序可以判断压缩数据的效果。要了解关于运行该实用程序的更多信息,请参考DB2 Utilities Guide and Reference手册。

 

 

  5) 处理成本: 压缩和解压数据时,要消耗一定的CPU资源。与使用DB2软件模拟程序相比,使用IBM的同步数据压缩硬件可以大大减少所消耗的CPU资源(当DB2启动时,它将判断硬件压缩特性是否可用)。

 

 

  6) 更好的字典:当使用LOAD实用程序来建立压缩字典时,DB2使用所装载的前n行(其中n取决于数据的压缩程度)来决定字典的内容。REORG使用一种抽样技术来建立字典。它不仅使用所装载的前n行,而且还会对该实用程序执行期间剩下的UNLOAD阶段中的行进行抽样。因此,REORG常常可以产生更能代表整个表空间或分区中的数据的字典。

 

 

  如果您的环境可以从压缩中得到好处,通常我们建议压缩那些DB2表空间和分区,因为由于更少空间容纳更多数据所带来的性能优势几乎总是大于压缩和解压数据时所需的CPU资源消耗。

 

 

  6. 装载大型的表

 

 

  当处理大量的数据时,一开始将数据装载到表中时可能会遇到性能问题。为了在装载过程中实现并行性,可以手动地创建多个LOAD任务,每个分区对应一个任务,或者,也可以在单个LOAD实用程序中装载多个分区。每个分区都展开在I/O子系统上,从而更易于达到最佳的并行度。

 

 

  为了获得最佳性能,在LOAD语句中指定SORTKEYS参数也很重要。这将指示DB2将索引键传递给内存中的排序程序,而不是再次将这些键写到DASD上的排序工作文件中,然后从中读取这些键。SORTKEYS还允许装载和排序之间的重叠,因为排序是作为一个单独的任务运行的。

 

 

  下面给出了关于装载大型表的其他建议:

 

 

  1) 一次只LOAD一个表。

 

 

  2) 如果可能,为那些预计将历时最长的任务提供较高的优先级。

 

 

  3) 将工作分布在sysplex上。

 

 

  4) 将辅助索引拆分成数块,以实现并行性(请参阅下面题为PIECESIZE的讨论)。

 

 

  5) 在开始装载数据时,指定LOG NO(用以防止日志记录,以及节省日志记录所消耗的大量资源),然后在成功装载数据之后运行一个映像拷贝。

原文转自:http://www.ltesting.net