欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

DB2面向OLTP环境的物理数据库设计:数据和索引压缩

程序员文章站 2022-04-01 08:53:05
...

您可以通过使用内置在 DB2 for Linux, UNIX and Windows 数据库中的压缩功能来减少表、索引和备份映像的大小,从而减少数据所需的存储量。 表和索引通常包含重复信息。这种重复可能是单独或合并的列值,也可能是列值的共同前缀,或者是在 XML 数据中的重复模

您可以通过使用内置在 DB2 for Linux, UNIX and Windows 中的压缩功能来减少表、索引和备份映像的大小,从而减少数据所需的存储量。 表和索引通常包含重复信息。这种重复可能是单独或合并的列值,也可能是列值的共同前缀,或者是在 XML 数据中的重复模式。压缩方法可以使用短字符串或符号来代替重复的信息。 您可以使用一些压缩功能来减少存储表和索引功能所需的空间,同时也可以采用一些功能来确定压缩可以提供的节省。您还可以使用备份压缩来减少备份的大小。 DB2 Version 9.7 的大多数版本中都包含的压缩功能包括:

 值压缩
 备份压缩

以下额外的压缩功能与 DB2 存储优化特性的许可是一起提供的:

 行压缩,包括 XML 存储对象的压缩
 临时表压缩
 压缩的暂时或永久表上的索引压缩

行压缩

行压缩,有时也被称为静态压缩,它用较短的符号字符串替换在各行中重复的值模式,从而压缩数据行。 使用行压缩的主要好处是,您可以在更小的空间中存储数据,可以产生显著的存储成本节省。此外,因为您以较慢的速度使用存储,所以可以推迟额外存储空间的未来支出。 除了节省成本之外,行压缩还可以提高性能。对压缩数据的许多查询可以用更少的 I/O 操作来执行,因为每次从磁盘读取都会带来更多数据。同样,可以将更多数据缓存在缓冲池中,这会增加缓冲池命中率。然而,这里有一个权衡要考虑,数据压缩和解压需要使用额外的CPU周期。 一个表要为行压缩做好准备,有两个要求:

 您必须使用 COMPRESS YES 子句创建或修改一个表,使该表具有使用压缩功能的资格。
 您必须从将要压缩的表中建立一个值或符号的字典。根据您所使用的 DB2 数据库产品的版本,建立压缩字典的手段会有所不同。

在这两个要求得到满足后,就可以压缩在表中插入或更新的数据了。

以下是在表和索引中启用行压缩的一个简单示例:

CREATE TABLE T1 (C1 INT, C2 INT, C3 INT) COMPRESS YES
CREATE INDEX I1 ON T1(C1)
SELECT COMPRESSION FROM SYSCAT.INDEXES WHERE TABNAME=’T1’
COMPRESSION
-----------
Y
1 record(s) selected.

行压缩的良好候选者

检查您的数据库,确定数据库内的哪些表可能是压缩的候选者。最初,启用数据压缩是为了在现有的未压缩表上节省存储。稍后,数据压缩可以帮助您优化未来的存储增长。在数据库现有的表和/或预期随着时间的推移增长得更快的表中,可能会发现一些存储“难题”。

很明显,最大的表是行压缩的候选者,但千万不要忽视较小的表。如果您有数百或数千个较小的表,您可能会受益于压缩许多较小的表的聚合效果。大和小在这里是相对的。数据库的设计就决定着包含一百万或几百万个行的表是大还是小。

几百 KB 以下的小表不是良好的行压缩的候选者,因为可以实现的空间节省并不足以抵消数据压缩字典的存储需求。小表的字典大小约为 100 KB,存储在物理表数据对象中。作为一个经验法则,应该考虑压缩大小为 2 MB 或以上的小表。

只读表是非常好的压缩候选者。如果表中只有少量更新,那么该表可能是一个很好的候选者。如果某个表有大量的更新,那么该表可能不是压缩的良好候选者。读/写比例为 70/30 或更高的表是优秀的压缩候选者。 试图压缩这些表之前,先将大表分隔到它们自己的表空间中。