当轮胎驶上赛道:DB2 9特性概览
范围分区
在 Linux、Unix 和 Windows 上,DB2 引入的新的分区技术可以提高数据仓库的性能并降低管理时间。新的表分区方法通常称为范围分区,它允许为每个分区定义数据范围,并根据数据范围将数据存储为单独的对象。例如,可以根据表中的一个日期列,按照月和年对表进行分区。这些存储对象可以位于不同的表空间或同一个表空间中,或者两种情况的组合(见图 3)。

图 3. DB2 Viper 范围分区
不要将这种分区技术与 Database Partitioning Feature(DPF)混淆,DPF 允许根据一个分布键和散列函数跨多个数据库分区对数据进行分布,它常常用来提高可伸缩性以支持非常大的数据库。
表分区使存储对象的行为就像单独的表一样,通过使用 ALTER TABLE...ATTACH 语句将现有的表与分区的表合并,可以很容易地实现快速转入(roll-in)。同样,用 ALTER TABLE...DETACH 语句很容易实现转出(roll-out)。查询处理可以利用分割来避免扫描无关的数据,从而为许多数据仓库风格的查询提供更好的查询性能。
表分区常常用来存储供分析的历史数据。例如,典型的保险数据仓库可能保存三年的索赔历史。在将每个月的数据载入仓库中时,最早的一个月的数据可以被存档并从活跃表中删除。新的转入和转出特性简化了这种数据移动过程,减少了管理时间。只扫描适当分区中的数据会提高查询的性能。范围在 CREATE TABLE 语句的 PARTITION BY 子句中指定。这个定义中使用的列称为表分区键列。
表分区可以单独使用,也可以与其他组织方案结合使用。CREATE TABLE 语句的每个子句包含一个算法来指出应该如何组织数据。以下三个子句说明数据组织的级别,这些级别可以以任何组合形式来使用:
DISTRIBUTE BY 跨数据库分区均匀地分布数据。使用这个子句支持查询内并行性并跨每个数据库分区进行负载平衡。这个概念称为数据库分区,由 DPF 支持。
PARTITION BY 将一个维中具有相似值的行分组在同一个数据分区中。这个概念称为表分区。
ORGANIZE BY 将多个维中具有相似值的行分组在同一个表区间中。这个概念称为多维簇(MDC)。
这个语法在子句之间提供了一致性,并为未来的数据组织算法提供了支持。结合使用 CREATE TABLE 语句的 DISTRIBUTE BY 和 PARTITION BY 子句使数据能够跨数据库分区和多个表空间进行分布。
DB2 Viper 是第一种同时支持全部三种数据库分区方法的数据服务器,这是数据管理和信息可用性方面的重大改进。
数据行压缩
早期的 beta 版测试结果表明,DB2 Viper 压缩技术最多可以节省 80% 的存储空间。由于行的大小减小了(这会减少 I/O 并提高缓冲池的命中率),物理 I/O 的数量和缓冲池需求也减少了。最终结果是在存储上花费的预算减少了,而且在某些情况下会提高性能。
DB2 Viper 压缩解决方案与 DB2 for z/OS 中使用的解决方案相似。压缩方法是将一个数据行中的重复数据模式映射为更小的符号,由此减小表数据的总大小。这个解决方案使用一种静态的基于词典的压缩算法,逐行进行压缩。与 DB2 for z/OS 中一样,使用 Lempel-Ziv 压缩的一种变体。
这个新特性除了可用于利用了上面提到的新分区特性优势的表之外,还可用于现有的 DB2 表。
CREATE TABLE 和 ALTER TABLE 语法包含一个新的 COMPRESS NO/YES 子句,用来设置和取消表的行压缩属性。设置 COMPRESS YES,之后执行离线的表 REORG,就会对表中所有可以压缩的行进行压缩。在词典已经存在并设置了 COMPRESS YES 之后,表中插入或载入的所有新行将使用这个词典进行压缩。
压缩词典是通过扫描整个表,根据表值建立的。与这种方法不同,其他数据库压缩技术为每一页建立一个压缩词典。通过在表级而不是页级建立压缩词典,可以分析整个表来识别模式,而不限于分析单一页。