表的空间需求
设计表时,您需要考虑那些表将要包含的数据的空间需求。 特别是,必须注意数据类型较大的列,例如 LOB 列或 XML 列。
大对象 (LOB) 数据
- LOB 数据对象:数据存储在一些大小为 64 MB 的区域中,这些区域被分成大小为 1024 字节的“2 的幂”倍的段。 (因此,这些段可以是 1024 个字节、2048 个字节和 4096 个字节,依此类推,直至 64MB。)
要减少 LOB 数据所用的磁盘空间量,可在 CREATE TABLE 和 ALTER TABLE 语句上的 LOB 选项子句上使用 COMPACT 参数。 COMPACT 选项将所需的磁盘空间量减至最小,方法是将 LOB 数据分成更小的段。 此过程不涉及数据压缩,只是使用最接近 1 KB 边界的最小空间量。 使用 COMPACT 选项可能导致在追加 LOB 值时性能下降。
包含在 LOB 数据对象中的可用空间量将受到更新和删除活动量以及要插入的 LOB 值的大小的影响。
- LOB 分配对象:有关分配和可用空间的信息存储在与实际数据分离的分配页中。 这些页的
数目取决于数据量,包括为大对象数据分配的未使用空间。 额外空间的计算方式如下:
表 1. 基于页大小的分配页额外空间 页面大小 分配页数 4 KB 每 4 MB 一页,另外每 1 GB 一页 8 KB 每 8 MB 一页,另外每 2 GB 一页 16 KB 每 16 MB 一页,另外每 4 GB 一页 32 KB 每 32 MB 一页,另外每 8 GB 一页 如果该字符数据的长度小于页大小,且它适合含有该数据其余部分的记录,那么应该使用 CHAR、GRAPHIC、VARCHAR 或 VARGRAPHIC 数据类型,而不要使用 BLOB、CLOB 或 DBCLOB。
长字段(LF)数据
长字段(LF)数据存储在单独的表对象中,该对象的结构与其他数据类型的存储空间不同。 数据存储在一些大小为 32 KB 的区域中,这些区域被分成大小为 512 个字节的“2 的幂”倍的段。 (因此,这些段可以是 512 个字节、1024 个字节和 2048 个字节,依此类推,直至 32768 个字节。)
长字段数据类型(LONG VARCHAR 或 LONG VARGRAPHIC)以使可用空间 易于收回的方式存储。 有关分配和可用空间的信息存储 在 4KB 分配页中,它在整个对象中不经常出现。
对象中未使用的空间量取决于长字段数据的大小以及此大小是否在该数据的所有出现之处都是不变的。 对于大于 255 个字节的数据条目,这个未使用的空间最大可为该长字段数据大小的 50%。
如果该字符数据的长度小于页大小,且它适合含有该数据其余部分的记录,那么应该使用 CHAR、GRAPHIC、VARCHAR 或 VARGRAPHIC 数据类型,而不要使用 LONG VARCHAR 或 LONG VARGRAPHIC。
系统目录表
创建数据库时,会创建系统目录表。 当将数据库对象和特权添加至该数据库时,这些系统表将增大。 最初,这些系统表使用大约 3.5 MB 的磁盘空间。
为目录表分配的空间容量取决于表空间的类型和包含这些目录表的表空间 的扩展数据块大小。 例如,如果使用扩展数据块大小为 32 的 DMS 表空间,那么最初会分配给目录表空间 20 MB 的空间。 注: 对于具有多个分区的数据库,目录表仅驻留在从中发出 CREATE DATABASE 命令的数据库分区上。 目录表的磁盘空间仅对于该数据库分区才是必需的。
临时表
某些语句需要临时表来进行处理(例如,使用一个工作文件来进行不能在内存中执行的排序)。 这些临时表需要磁盘空间;所需的空间量取决于查询的大小、数目和属性以及返回的表的大小。
您的工作环境是独特的,这使得很难估计临时表的空间需求。 例如,由于各种系统临时表的生命周期更长,为系统临时表空间分配的空间比实际在使用的表空间更多。 使用 DB2_SMS_TRUNC_TMPTABLE_THRESH 注册表变量时可能会出现这种情况。
可以使用数据库系统监视器和表空间查询 API 来跟踪在正常操作期间所用的工作空间量。
可以使用 DB2_OPT_MAX_TEMP_SIZE 注册表变量来限制查询使用的临时表空间大小。
XML 数据
插入到类型为 XML 的列中的 XML 文档可以驻留在缺省的存储器对象中,也可以直接驻留在基本表行中。 基本表行存储器由您控制,并且仅可用于小型文档;较大的文档始终存储在缺省的存储器对象中。