数据库管理表空间
在 DMS(数据库管理空间)表空间中,数据库管理器控制存储空间。存储模型由有限数目的设备或文件组成,这些设备或文件的空间由 DB2 数据库 Linux 版、UNIX 版和 Windows 版来管理。数据库管理员决定使用哪些设备和文件,而 DB2® 管理这些设备和文件上的空间。这种表空间实质上实现了一种特殊用途的文件系统,用于最好地满足数据库管理器的需要。
DMS 表空间与 SMS 表空间之间的差异在于,对于 DMS 表空间,空间是在创建表空间时分配的。对于 SMS 表空间,空间是根据需要分配的。包含用户定义的表和数据的 DMS 表空间可以定义为存储任何表数据或索引数据的常规表空间或大型表空间。
在设计 DMS 表空间和容器时,应该考虑下列事项:
常规表空间最多可包含 16384 个页,因此选择较大的页大小可以增加表空间的容量,详见下表
页大小 | 行大小限制 | 列数限制 | 最大容量 |
4 KB | 4005 | 500 | 64 GB |
8 KB | 8101 | 1012 | 128 GB |
16 KB | 16293 | 1012 | 256 GB |
32 KB | 32677 | 1012 | 512 GB |
而大型表空间的最大大小是 16TB,大型表空间只被DMS支持。
与 SMS 表空间不同,组成一个 DMS 表空间的容器不必大小相同;然而,通常不建议这样做,因为会导致在容器间不均匀地进行条带分割,并会降低性能。若任何容器已满,DMS 表空间会使用其他容器中的可用空间。
因为空间是预分配的,所以在能够创建表空间之前,该空间必须是可用的。当使用设备容器时,该设备也必须有足够的空间以便存储容器定义。每个设备上只能定义一个容器。为避免浪费空间,设备的大小应该等于容器的大小。例如,如果分配给该设备 5000 页,而将设备容器定义为分配 3000 页,那么设备上的 2000 页将是不可用的。
在缺省情况下,每个容器中都保留一个扩展数据块作为开销。只使用整个扩展数据块,因此为了对空间进行最优管理,可以使用如下公式来帮助您确定当分配容器时要使用的适当大小:
extent_size * (n + 1)
其中,extent_size 是表空间中每个扩展数据块的大小,而n是您要在该容器中存储的扩展数据块数目。
DMS 表空间的最小大小是五个扩展数据块。试图创建小于五个扩展数据块的表空间将产生错误(SQL1422N)。
表空间中有三个扩展数据块是保留给开销使用的。
要存储任何用户表数据,至少需要两个扩展数据块。(这些扩展数据块是一个表的规则数据所必需的,但不是任何索引、长型字段或大对象数据所需的,它们需要自己的扩展数据块。)
设备容器必须使用带“字符型特殊接口”的逻辑卷,而不是物理卷。
注:虽然很多资料上都声称裸设备性能好,但随着CIO/DIO的发展,文件类型的性能与裸设备计划相差无几,而且文件类型逼裸设备管理起来方便很多,因此在DMS表空间中建议使用文件类型来代替裸设备。
如果工作负载涉及到 LOB 或 LONG VARCHAR 数据,那么可通过文件系统高速缓存改进性能。
注: 数据库管理器的缓冲池不缓冲LOB和LONG VARCHAR。 与 SMS 表空间相似,DMS 文件容器可以利用文件系统预取和高速缓存。但是,使用原始设备容器的DMS表空间却不能。
某些操作系统允许拥有大小超过 2GB 的物理设备。应该考虑将物理设备划分为多个逻辑设备,以使任何容器都不超过操作系统允许的大小。
这一关于页在存储器中的连续放置的一般性陈述有一个例外。当使用DMS表空间时,有两个容器选项:原始设备和文件。当使用文件容器时,数据库管理器在创建表空间时分配整个容器。这种一开始就分配整个表空间的结果是,即使由文件系统执行分配,物理分配也通常(但不保证)是连续的。当使用原始设备容器时,数据库管理器控制整个设备,并始终确保扩展数据块中的页是连续的。
当使用 DMS 表空间时,您应考虑将每个容器与不同的磁盘相关联。这使表空间容量可以更大,并且能够利用并行 I/O 操作。
CREATE TABLESPACE 语句在数据库中创建新的表空间,向表空间分配容器,并在目录中记录表空间定义和属性。当创建表空间时,扩展数据块大小被定义为许多连续页。扩展数据块是表空间中的空间分配单位。只有一个表或对象(例如,索引)能够使用任何一个扩展数据块中的页。将逻辑表空间地址映射中的扩展数据块分配给表空间中创建的所有对象。扩展数据块分配通过“空间映射页”(SMP)进行管理。
逻辑表空间地址映射中的第一个扩展数据块是包含内部控制信息的表空间的头部。第二个扩展数据块是表空间的“空间映射页”(SMP)的第一个扩展数据块。SMP 扩展数据块以固定间隔方式分布在表空间中。每个 SMP 扩展数据块都是当前 SMP 扩展数据块到下一 SMP 扩展数据块的扩展数据块位映射。位映射用来跟踪正在使用哪些中间扩展数据块。
SMP 后面的一个扩展数据块是表空间的对象表。对象表是一个内部表,它跟踪表空间中存在哪些用户对象,以及它们的第一个“扩展数据块映像页”(EMP)扩展数据块的位置。每个对象都有其自己的 EMP,它提供了指向该对象的每一页的映射,这些映射存储在逻辑表空间地址映射中。下图说明了如何在逻辑表空间地址映射中分配扩展数据块。