IDS 为存储优化和压缩现有的表数据提供了全面的在线支持,并允许应用程序在此期间继续使用表。本文将概述 IDS 数据压缩和存储优化功能,演示如何执行这两个任务。
IDS 存储优化会考虑整行和其中的所有列(除了作为字节串存储在行之外的列数据,比如 BLOB 数据)。然后,IDS 寻找重复出现的模式,把这些模式作为符号存储在压缩词典中,参见图 1:
图 1. 可作为符号存储在词典中的模式
在创建词典之后,IDS 将该字典存储在一个词典存储库中。
表的存储优化过程涉及到四个步骤:
创建压缩词典。 压缩表或表分段中的行中的数据。 重新组合表或分段行。 回收空闲的空间。
下面几节将详细讨论每个步骤。
创建压缩词典
为了创建词典,IDS 从现有的表中对一些行进行取样,并创建一个符号词典,这些符号代表字节模式。IDS 在词典存储库中存储这个词典。每个包含已压缩的分区的 dbspace 都有一个词典存储库。词典还可以存储在内存中,这使活动的查询和更新可以快速压缩和解压数据。
每个词典的大小大约为 75KB。但是,每个词典可以增长到 150KB。IDS 在内存中存储每个压缩的分区的压缩词典。因此,DBA 一定要考虑到这些资源需求。
压缩表或分段行中的数据
在创建词典之后,IDS 会启动一个后台进程,它扫描和压缩了表或分段行。这个进程压缩每一行,并将这些行留在原来的页面中,它还会压缩插入或更新的所有行。
在运行压缩操作时,表上可能正在执行其他事务和查询。因此,IDS 在小事务中执行此操作,只在短时间内持有当前压缩的行上的锁。
重新组合行
完成数据压缩之后,在行之间可能存在大量未使用的空间或空洞。重新组合操作使用一种与压缩操作相似的算法将所有行转移到分区的前部。该操作也会利用小事务,只锁住当前转移的行。
回收空闲的空间
重新组合所有行之后,收缩操作会删除未使用的表或分段空间,将空闲的空间返回给包含此表或分段的 dbspace。
压缩和存储优化任务的先决条件
要执行存储优化任务,必须能够连接 sysadmin 数据库,还必须是数据库服务器管理员 (DBSA)。在默认情况下,只有名为 Informix 的用户能够执行这些任务。
识别压缩候选对象
执行估计压缩率的命令
存储优化可以在表级或分段表的分段级上进行。可以通过执行带 estimate_compression 参数的 table 或 fragment 命令来识别压缩候选对象(在 Version 11.50.xC4 和更高版本中)。
这个命令显示的数据压缩率是根据对表行的随机取样计算出的估计值。实际节省的空间比率可能有细微的差异。
清单 1 给出一个示例职员表,它有三个分段。第一个分段是未压缩的,curr(当前压缩率)列中的值为 0.0%。另外两个分段的 curr 列表示当前实现的压缩率。每个分段的 change 列表示未压缩的表与已压缩的表之间可能存在的压缩率差异。
清单 1:压缩估计值
$ dbaccess hrdb –Database ">selected.> select sysadmin:task("table estimate_compression", tabname) from systables where tabid > 100;(expression) est curr change partnum table ----- ----- ------ ---------- ----------------------------------- 85.9% 0.0% +85.9 0x00200002 hrdb:informix.employee 85.9% 85.5% +0.4 0x00300002 hrdb:informix.employee 86.1% 86.1% +0.0 0x00400002 hrdb:informix.employee Succeeded: table estimate_compression hrdb:informix.employee(expression) est curr change partnum table ----- ----- ------ ---------- ----------------------------------- 22.5% 0.0% +22.5 0x001001f6 hrdb:informix.audit_log Succeeded: table estimate_compression hrdb:informix.audit_log2 row(s) retrieved.
在 Windows 上使用单独的 IDS Compression Estimator
在 11.50.xC4 之前的 IDS 版本中,可以使用单独的 Windows® 实用程序 IDS Compression Estimator 来识别压缩候选对象。本文的 参考资料 部分包含这个实用程序的下载链接。在 Windows 系统上安装这个实用程序以及 Client-SDK 或 I-Connect(这是连接 IDS 实例所需的)。安装估算程序(estimator)之后,可以提供所需的连接信息,远程连接任何 IDS 实例。
图 2 说明了这个实用程序如何显示数据压缩可能节省的存储空间:
图 2. IDS Compression Estimator