在 DB2 for Linux, Unix, and Windows 中的行压缩的最佳实践
2009-02-08 16:38:31 来源:WEB开发网要是你想重组你的数据库并通过特定的索引来 re-cluster 它,你可以在一张表上运行应用了 scan-sort 或 index-scan 方法的完整 REORG 。在 REORG 命令中指定了一个索引的情况下,数据库管理器就已经默认使用 scan-sort 方法。这会进行表扫描并在内存中对结果排序(尽管有可能通过一个临时表空间溢出到磁盘)。 Index-scan REORG 方法需要显式的指定 INDEXSCAN 关键字;它不会排序,因为他是按照索引的顺序。然而,index-scan 方法需要对这张表在临时表空间中创建一个影子复制,并为索引中的每个 RID 从原表中读取数据。
基于这张表上 index 的数目变化,在重组处理过程中可能会产生额外的开销。虽然稍微提高了建立字典的开销,index-scan REORG 处理需要一个额外的表用于建立压缩字典。不过 scan-sort 处理通常能更快的完成重组和创建字典(除非这张表很小)。 Index-scan REORG 在 index 高度集群并且在系统没有足够的排序资源(内存和临时空间)时会更好,因为这种情况下 scan-sort 可能会溢出。此外,如果表已经被压缩过了,一个 index-scan 可能会运行得更好,因为有更少的页面被处理,这增加了提高缓冲池命中率的可能。
减少使用表重组
当你用 COMPRESS YES 子句来创建表或者更改表时,在 DB2 9 和 DB2 9.5 中压缩都是启用的。在 DB2 9 中你可以创建一个数据压缩字典,表现为一个离线表重组或者通过 INSPECT 实用工具。在 DB2 9.5 及以后的版本,你只需要对表启用压缩,而且一旦这张表中达到足够的数据量(大约 1 到 2M)那么将自动创建压缩字典。一旦表中存在数据压缩字典,所有后来添加的数据都将被压缩。
在 DB2 9 中,你可能对表已经启用了压缩,不过一个压缩字典还没有建立起来。为了不先用数据填充表然后重组(离线)表中所有的数据这样的方式来创建压缩字典,要在这张表中添加字典的另外一个方法是使用 INSPECT 命令。一旦一张表装入数据后,使用 INSPECT ROWCOMPESTIMATE 来创建数据压缩字典。运行这个操作,表将保持在线。 压缩字典只会在表中没有字典的情况下才会被创建。表中要是有字典,所有后来添加的数据都将根据这个字典被压缩;现有的行会保持未压缩的状态。你可以决定什么时候使用 INSPECT 命令来在表中创建压缩字典。你必须明确有足够的数据而且现有数据可以代表所有的数据。一旦这张表中有压缩字典,你期望更多数据添加到这张表中,以获得更多的压缩空间节省。
更多精彩
赞助商链接