Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103713380
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 00:19:25

    来源:51cto  

数据压缩

DB2提供了压缩表空间或分区内数据的功能。通过指定CREATE TABLESPACE(创建表空间)语句中的 COMPRESS YES(压缩许可)选项,之后在表空间上同时执行LOAD或REORG实用工具集,即可完成该功能。数据的压缩是通过用更短的串来替换频繁出现的字符串实现的。系统还创建了一个字典,包含了原始字节串和它们的替代串之间的映射信息。

一定数量的CPU资源被用于在执行数据存储对其进行压缩,之后,当外部存储设备读取时,数据又被解压缩。然而,数据压缩也能够提供性能方面的好处,因为更多的数据存储在更小的空间内(在DASD上和缓冲池中);同未经压缩的数据相比,这样可以产生更少的同时读取、更小的I/O等。

接下来是当试图决定是否压缩一个表空间或分区时,需要考虑的一些事情:

行的长度:行越长(尤其是在接近页的尺寸时),压缩的有效性就越低。DB2的行不能够跨页,当一页上有多于一行的情况时,你也许不能获得足够的压缩。

表的尺寸:对于较大的表,压缩具有较好的效果。对于很小的表,压缩字典的大小(8KB到64KB)可能会抵消压缩节省下的所有空间。

数据中的模式:对于一个特定的表空间或分区,数据中重复出现的模式的频率,决定了压缩的效果。含有大量重复字符串的数据能够获得显著的压缩效果。

压缩估计:DB2提供了一个单独的实用工具集,DSN1COMP,它可以用来测定数据压缩将有怎样的效果。想获得有关运行该使用工具的额外信息,请参考DB2实用工具集指南和参考手册。

处理成本:在压缩和解压缩DB2数据时,会消耗一些CPU资源。如果你用IBM的同步数据压缩硬件特征,所消耗的CPU资源将比利用DB2软件仿真程序低得多(当DB2启动时,这决定了硬件压缩特征是否可用)。

更好的字典:当用LOAD使用工具集来建立压缩字典时,DB2用户用最初载入的n行(n取决于你能够压缩的数据量)来决定字典的内容。REORG采用取样技术来建立字典。它不仅使用最初载入的n行,还在实用工具执行UNLOAD(未载入)阶段的剩余时间里继续对数据行采样。

通常情况下,我们推荐你在自己的特定环境下,压缩那些DB2表空间和分区,这将会使你的环境受益;因为在更小的空间内存储更多的数据的性能优势,几乎总是在价值上超过压缩和解压缩数据所消耗的CPU资源。

载入大表

在处理大批量数据时,将数据初始载入表中可能会对系统性能产生挑战。为了在载入过程中实现并行性,你可以手动创建多个LOAD作业,每个分区建一个;或者作为另一个选择,你可以在一个LOAD程序中载入多个分区。每个分区都延伸至I/O子系统,这种方式可以更容易地实现最理想的并行性。

为了使性能最优化,在LOAD语句中指定SORTKEYS参数也很重要。这个参数指示DB2将索引方法传递给内存中的分类程序,而不是将关键字写入或者再次读取DASD上的排序任务文件。SORTKEYS也能够实现载入和分类之间的交迭,因为分类是作为一个独立的任务运行的。

还有一些关于载入大表的额外的建议,如下:

一次LOAD一个表。

如果可能的话,为你预期的任务赋予较高的优先级,来获得最高的消耗时间。

在系统综合体上分配工作。

将二级索引分解为小段,以便获得并行性(见PIECESIZE内的讨论)。

在数据的初始载入过程中,指定LOG NO(用于防止记录日志,它耗费了相当多的资源),在成功载入数据之后运行一个图像复制。

自由空间考虑事项

分配自由空间的主要目的,是为了将数据行保存在相同的物理序列中作为群集索引,这样一来将减少需要重新组织数据的频率。此外,较好的行聚簇将导致更快的读取访问和更快的行插入。但是,自由空间的过度分配又将导致DASD空间的浪费、每一个I/O传输的数据较少、缓冲池的利用效率较低,以及需要扫描更多的页。

表空间和索引中的自由空间分配,由CREATE或ALTER TABLESPACE和CREATE或ALTER INDEX 语句中的PCTFREE和FREEPAGE选项决定。

PCTFREE在载入或者重新组织数据时,为DB2指示表空间或索引中有多大的百分比是闲置的。在插入新的行和索引条目时,DB2将利用那些自由空间。如果没有足够的自由空间在正确的页(即以正确的聚簇序列)上写入行或者索引条目,那么DB2必须将多出来的数据放在另外的页上作为代替。在越来越多的记录放置在物理序列之外的情况下,系统性能将会受到严重影响。

FREEPAGE在载入或者重新组织数据时,为DB2指示一个整页成为自由空间的次数。例如,如果你将FREEPAGE确定为5,在每填满5页的数据之后,DB2将分配一整页的自由空间。如果你的表中的行大于半页,FREEPAGE将是很有用的,因为在这样的情况下,你不能在这一页中插入第二行。

是否在你的表空间内定义自由空间,分配的数量又是多少,这些都主要取决于表空间中表的插入特性(删除活动性居于次要程度)。换句话说,向表中插入行有多大的频率,并且这些行插入的位置是在哪里?根据上述标准,四种主要的类别如下:

只读表:如果在表上不会有任何修正,定义时就可以不分配自由空间。同样,也就不需要运行REORG实用工具集。

随机插入:对于含有相当大数量已有行和相对较少插入行的动作的表,使用默认的PCTFREE(表为5,索引为10)是一个好的起始点。之后,用RUANSTATS来监视数据组织破坏的程度,并且结合你要求的运行REORG的频率,根据需要上调或下调PCTFREE。对于插入活动很频繁的表,你可能需要使用比默认值较高的PCTFREE的值。对于初始为空或只含有极少数行的表(例如,在一个新数据库部署的过程中),你也许需要确定一个非常高的PCTFREE值,并相当频繁地运行REORG,直到表中的行数比较多了。

在表的末端插入:如果表中行的长度不增加,那么就没有必要分配自由空间,因为它们可以加在表的末端。而且既然它们是以物理聚簇序列的形式写入的,REORG也不需要了。但是如果表含有可修改的VARCHAR类型的列,或是如果表是压缩过的,那么行的长度有可能增加,这将使得一行被挤到另外一页上去。通过在表空间上执行RUNSTATS然后核查DB2目录表SYSIBM.SYSTABLEPART的NEARINDREF和FARINDREF列,你就能够确定这些。如果你的表变乱了,那么为表空间设定一个PCTFREE值,并且用RUNSTATS继续监视放错位置的行的数目。根据你观察到的数据和趋势,相应地调整你的REORG的频率和PCTFREE值。通过设定REORG TABLESPACE中的INDREFLIMIT和REPORTONLY选项,你就能够在更新后的DB2表中监视紊乱的数量和速度。

插入一个热点:这是表具有很频繁的插入活动的情况,这种插入活动集中在一个位置(或多个位置),而不是正好处于表的末端。这可能是要应付的最困难的种类。试着增加PCTFREE的数值。如果插入保持在开头的段,行也不是很长,几行可以存储在同一页之内。FREEPAGE是在这种情形下另外的一个考虑。有必要严密监视表变乱有多么快,这样就可以在性能显著下降之前运行REORG。

阅读(413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~