DB2 10.5 for Linux, UNIX, and Windows

数据库管理的表空间的表空间映射

表空间映射是数据库管理器的 DMS 表空间的内部表示,它描述表空间中页位置的逻辑至物理转换。本主题描述表空间映射为何有用,以及表空间映射中的信息从何而来。

在分区数据库中,DMS 表空间中的页按照从 0 到 (N-1) 进行逻辑编号,其中 N 是表空间中可用页的数目。

DMS 表空间中的页分组为扩展数据块(基于扩展数据块大小),并且从表空间管理的角度来看,所有对象分配都是以扩展数据块为基础完成的。即,表可能仅使用扩展数据块中的一半页,但是认为整个扩展数据块都在使用中,并且由该对象所有。缺省情况下,使用一个扩展数据块来存放容器标记,并且此扩展数据块中的页不能用来存放数据。但是,如果 DB2_USE_PAGE_CONTAINER_TAG 注册表变量已打开,那么仅将一页用作容器标记。

图 1 显示了 DMS 表空间的逻辑地址映射。

图 1. DMS 表空间
说明 DMS 表空间的逻辑地址映射的图形

在表空间地址映射中,有两种类型的映射页:扩展数据块映射页 (EMP) 和空间映射页。

对象表是一个内部关系表,它将对象标识映射至该表的第一个 EMP 扩展数据块的位置。这个 EMP 扩展数据块直接或间接地映射出该对象中的所有扩展数据块。每个 EMP 都包含一连串的条目。每一条目都将对象相对扩展数据块号映射至该对象扩展数据块所在的相对表空间页号。直接 EMP 条目直接将对象相对地址映射至相对表空间地址。第一个 EMP 扩展数据块中的最后一个 EMP 页包含间接条目。间接 EMP 条目映射至 EMP 页,EMP 页然后映射至对象页。第一个 EMP 扩展数据块中最后一个 EMP 页中的最后 16 条目包含双重间接条目。

逻辑表空间地址映射中的扩展数据块以循环顺序在与该表空间相关联的容器上进行条带分割。

因为容器中的空间是按扩展数据块来分配的,所以不会使用未组成完整扩展数据块的页。例如,如果您具有 205 页的容器,且扩展数据块大小为 10,那么 1 个扩展数据块将用于存放标记,19 个扩展数据块将用于存放数据,并且剩余的 5 页将被浪费。

如果 DMS 表空间包含单个容器,那么从逻辑页编号到磁盘上的物理位置的转换是直接进行的过程,其中 0、1 和 2 将以磁盘上的相同顺序定位。

当有多个容器并且每个容器大小相同时,它也是相当直接的过程。表空间(包含页 0 到(扩展数据块大小 - 1))中第一个扩展数据块将位于第一个容器中,第二个扩展数据块将位于第二个容器中,依此类推。在最后一个容器之后,过程将从第一个容器开始重复。这种循环过程可以保持数据平衡。

对于包含不同大小容器的表空间,不能使用每个容器轮流进行的简单方法,因为它不会利用大型容器中的额外空间。这就是引入表空间映射的位置 - 它规定如何在表空间内定位扩展数据块,确保物理容器中的所有扩展数据块都可供使用。

注: 在下列示例中,容器大小未将容器标记计算在内。容器大小很小,仅用于说明目的,它们不是建议的容器大小。这些示例显示表空间中不同大小的容器,但建议使用相同大小的容器。

示例 1:

表空间中有 3 个容器,每个容器包含 80 个可用的页,并且表空间的扩展数据块大小是 20。因此,每个容器有 4 个扩展数据块 (80 / 20),总数为 12 个扩展数据块。这些扩展数据块位于磁盘上,如图 2 中所示。

图 2. 带有三个容器和 12 个扩展数据块的表空间
显示由三个容器和 12 个扩展数据块组成的表空间。
要查看表空间映射,使用快照监视器获取表空间快照。在示例 1 中,三个容器大小相等,表空间映射为如下所示:
  Range   Stripe Stripe Max      Max   Start   End    Adj.  Containers
  Number  Set    Offset Extent   Page  Stripe  Stripe
     [0]    [0]       0     11    239       0       3   0   3 (0, 1, 2)

范围是其中连续范围的分割区包含同一组容器的一段映射。在示例 1 中,所有的分割区(0 到 3)都包含同一组 3 个容器(0、1 和 2),因此认为它是单个范围。

表空间映射中的标题是“范围编号”、“分割集”、“分割区偏移”、“根据范围寻址的最大扩展数据块编号”、“根据范围寻址的最大页编号”、“起始分割区”、“结束分割区”、“范围调节”和“容器列表”。这些将会在示例 2 中更详细地加以说明。

还可以对此表空间进行图解(如图 3 中所示),其中每条竖线对应一个容器,每条横线都称为分割区,并且每个单元编号对应一个扩展数据块。

图 3. 带有三个容器和 12 个扩展数据块,突出显示分割区的表空间
包含三个容器和 12 个扩展数据块,采用表或数组形式的表空间。

示例 2:

表空间中有两个容器:第一个大小是 100 页,第二个大小是 50 页并且扩展数据块大小是 25。这意味着第一个容器具有四个扩展数据块并且第二个容器具有两个扩展数据块。可以对表空间进行图解,如图 4 中所示。

图 4. 带有两个容器,突出显示范围的表空间
包含两个容器和 6 个扩展数据块,采用表或数组形式的表空间。
分割区 0 和 1 包含两个容器(0 和 1),但是分割区 2 和 3 只包含第一个容器 (0)。这些分割集的每一个分割集都是一个范围。表空间映射,如表空间快照中所示,类似如下:
  Range   Stripe Stripe Max      Max   Start   End    Adj.  Containers
  Number  Set    Offset Extent   Page  Stripe  Stripe
      [0]    [0]      0        3     99       0       1  0    2 (0, 1)
      [1]    [0]      0        5    149       2       3  0    1 (0)

在第一个范围中有四个扩展数据块,因此在此范围中寻址的最大扩展数据块编号(最大扩展数据块)为 3。每个扩展数据块都有 25 页,因此在第一个范围中有 100 页。因为页的最大编号也是从 0 开始,所以此范围中寻址的最大页编号(最大页)是 99。此范围中的第一个分割区(起始分割区)是 0,最后一个分割区(结束分割区)是 1。此范围中有两个容器,它们是 0 和 1。分割区偏移是分割集中的第一个分割,因为只有一个分割集,所以在此情况下它是 0。范围调节(Adj.)是在表空间中重新平衡数据时使用的偏移量。(当在表空间中添加或删除空间时会发生重新平衡。) 当没有重新平衡时,它将始终为 0。

在第二个范围中有两个扩展数据块并且因为先前范围中寻址的最大扩展数据块编号是 3,所以此范围中寻址的最大扩展数据块编号是 5。在第二个范围中有 50 页(2 个扩展数据块 * 25 页)并且由于在先前范围中寻址的最大页编号是 99,所以在此范围中寻址的最大页编号是 149。此范围从分割区 2 开始并且在分割区 3 结束。