2008年(239)
分类:
2008-06-17 23:54:51
DB2数据库的物理和逻辑结构,和我们前面讲到的数据库结构有一些区别,主要体现在:
(1)数据文件被称为容器(container)。容器可以是裸设备、操作系统文件,也可以是一个操作系统目录。
(2)系统中引入一个新的概念:分区组(partition group)。
DB2数据库的存储结构可见图4-6。
1. 分区组
分区组应用在DB2系统的并行处理环境下,它是一个或多个数据库分区(也称为节点)的集合,每一个数据库分区都属于一个分区组。
在数据库的并行处理环境中,创建表空间时需要指定分区组,这样系统就自动在分区组所包含的所有数据库分区内建立该表空间的分区。有关DB2系统的并行处理环境,本书不作详细介绍。
2. 表空间
在DB2系统中,可以创建两种类型的表空间:
(1)系统管理表空间(system managed space ,SMS)
(2)数据库管理表空间(database managed space,DMS)
系统管理表空间使用的容器都是操作系统目录,容器的空间不会预先分配,存储在表空间中的表、索引以文件的方式存放在目录中。数据库管理表空间使用的容器可以是裸设备,也可以是操作系统文件,容器的空间预先分配。
在一个数据库系统中,可以混合使用这两种表空间,用户可以根据自己的需要进行选择。一般来说,使用系统管理表空间,可以方便系统的管理和维护;而使用数据库管理表空间,将提高数据库系统的处理速度。
不论是用那种表空间,表空间中所有表、索引的数据均匀地存放在各个容器上,当其中任何一个容器没有空闲空间后,系统就认为整个表空间没有可用空间。
3. 段
DB2系统的相关资料中并没有段的概念。但由于段和表、索引密切相关,因此我们还是把它作为数据库逻辑结构的一部分。
在DB2系统中,如果在数据库管理表空间上创建表,则可以将表和表上索引分开存放在不同的数据库表空间中。如果表中包含有大对象字段(如存放图形、图象等),还可以将这些大对象字段和表中其它的字段分开,单独存放在另外的数据库表空间中。
如果使用系统管理表空间创建表,则表、索引以及表中的大对象字段只能存放在同一个表空间中,它们分别以文件的形式存放在容器的目录中。
4. 扩充
在创建表空间时,可以设定该表空间的扩充大小,存放在该表空间中的所有表、索引都使用此设置进行磁盘空间的分配。如果创建表空间时没有指定扩充大小,则该表空间使用缺省设置。DB2系统缺省的扩充大小为8个逻辑页,可以为不同的表空间设置不同的扩充大小。
表空间中的所有容器可以看作被环行排列。系统在为表、索引分配空间时,首先从环中的第一个容器开始,进行扩充的分配。在此扩充没有空闲空间后,系统从环中的下一个容器中分配扩充,以此类推,磁盘空间的分配就按照这个环循环进行。
由于这种空间分配方式,表、索引中的数据被均衡地存放在表空间中的所有容器上。如果创建表空间时,能够将每个容器都放置在不同的磁盘上,将极大地提高系统I/O的并行处理能力。也正是由于这个原因,一旦表空间的一个容器没有空间,系统就认为整个表空间不存在空间。因此应当为表空间中的容器分配相同大小的磁盘空间。
DB2系统使用位映射(bit map)方式管理扩充的分配和回收,也就是使用一个二进制位来决定一个扩充是否被使用。
5. 逻辑页
在DB2数据库中,不同的表空间可以使用不同的页尺寸。在创建表空间时,如果指定页尺寸,则存储在该表空间中的所有表、索引都使用此页尺寸进行读写。如果没有指定页尺寸,则缺省使用操作系统的页尺寸。
要在一个数据库中使用多个页尺寸,需要在数据库中创建多个缓冲池,设定不同的页尺寸。将表空间绑定到具有相同页尺寸的缓冲池上,系统对该表空间中所有表、索引的操作,都通过所绑定的缓冲池完成。