更改开始

使用霍夫曼压缩算法压缩数据

Db2 可以使用霍夫曼压缩来减少数据压缩所需的表空间。 压缩表空间中的数据可以显著减少存储数据所需的磁盘空间,并有助于提高缓冲池性能。

准备工作

FL 504 TS_COMPRESSION_TYPE 子系统参数指定用于压缩的默认压缩算法 Db2 子系统级别的数据。

FL 509 ALTER TABLESPACE、CREATE TABLE和CREATE TABLESPACE语句的COMPRESS选项可以定义压缩算法,用于在表空间或分区级别压缩 Db2 数据。

您可以使用 DSN1COMP 工具来确定数据的压缩效果。

启用霍夫曼压缩:
  • Db2 子系统或数据共享组必须在 IBM z14® 或更高版本的硬件上运行
  • 功能级别必须为 V12R1M504 或更高
  • 要压缩的表格空间是一个通用表格空间
  • 以下任何一项为真:
    • 表空间由压缩是子句定义,TS_COMPRESSION_TYPE子系统参数设置为HUFFMAN
    • FL 509 表格空间由压缩是和霍夫曼条款定义

Db2 12 中启用较低(*)功能级别对HUFFMAN压缩的使用有以下影响:

  • 如果启用较低的功能级别 V12R1M504*–V12R1M508* ,则所有新的REORG、LOAD或插入操作都会为定义为使用霍夫曼压缩的表空间生成霍夫曼字典。
  • 如果将功能级别设置为 V12R1M503* 或更低,则所有新的REORG、LOAD或插入操作(产生压缩字典)都将产生固定长度的字典。 然而,任何现有的霍夫曼字典仍用于压缩和扩展任何相关分区。

使用“按哈希值组织”子句定义的表空间无法压缩。

关于本任务

压缩数据时,高频出现的位串会被更短的串取代。 位串到替换位的映射信息存储在压缩字典中。 Huffman压缩使用 IBM® zSystems™ 硬件(在 IBM z14 或更高版本上)在存储数据之前对其进行压缩,并对缓冲池中从页面检索的数据进行解压缩。 在许多情况下,使用霍夫曼压缩可以大大减少存储数据所需的磁盘空间,但压缩率取决于数据的特性。

根据SQL的工作量和压缩量,压缩数据可能会带来以下性能提升:
  • 缓冲池命中率更高
  • 更少的输入/输出
  • 减少getpage操作

过程

如果满足霍夫曼压缩的要求,以下操作将使用 IBM zSystems 霍夫曼压缩来压缩 Db2 数据:

  • 运行REORG TABLESPACE实用程序,不使用KEEPDICTIONARY选项。
    将为REORG中包含的每个分区构建一个新的压缩字典(使用霍夫曼压缩)。 REORG实用程序输出将显示压缩统计信息。
  • 使用INSERT或MERGE操作,将新记录添加到分区的新分区(或几乎为空的分区)中,范围是表空间。
    如果压缩字典不存在,并且表空间中的数据量达到由 Db2 确定的阈值,则创建压缩字典。 在压缩字典建立后, Db2 使用它来压缩所有后续添加到表空间的数据。
  • 使用REPLACE运行LOAD实用程序。
    当加载的数据足以构建一个完整的字典时,就会创建一个霍夫曼字典。 原始记录在页面集中保持未压缩状态,而新记录则使用新字典进行压缩。 由于词典仅基于加载数据的一小部分,因此词典的效率可能不是最佳的。
  • 注:
    • 如果使用页面级锁定,每页行数的增加(由于更有效的压缩节省了空间)可能会影响锁定粒度。
    • 从固定长度压缩转换为霍夫曼压缩后,行数过少可能无法显著节省空间。
    • Db2 将允许在同一表空间中混合使用不同类型的字典。

更改结束