SMS 表空间
系统管理的空间(System Managed Space,SMS)表空间使用操作系统所提供的文件系统管理器来分配和管理表的存储空间。在 SMS 表空间内,每个容器都是一个操作系统目录,而表对象被创建成这个目录中的文件。创建 SMS 表空间时,用户必须指定每个容器的目录名。通过对每个对象使用唯一的文件名,DB2 将在表空间中所使用的目录内创建表。
如果在多个容器中创建一个表空间,那么 DB2 将均衡写入到各个容器的数据量。由于一旦创建了 SMS 表空间,就不能动态地将容器添加到 SMS 表空间中,因此在创建该表空间时要了解该表空间的大小需求并创建所有必需的容器,这一点很重要。
对于 SMS 表空间:
- 所有表数据和索引都共享同一个表空间。
- 表空间中的每张表都有其自己的文件名,可由所有容器使用。文件扩展名表示存储在文件中的数据类型。
- 文件大小有可能动态增长,其大小上限由容器数量、操作系统在文件系统大小方面的限制以及操作系统在单个文件大小方面的限制所决定。
- 当单个容器中的所有空间都已分配之后,就认为该表空间已满,即使其它容器中还有剩余空间。
- 只可以将新容器添加到还没有任何容器的分区上的 SMS 中。
- 在 Linux 或 UNIX 上,文件系统大小可能会增加。
SMS 表空间非常便于管理,建议将它用作 TEMP 表空间。
要创建 SMS 表空间,请使用下面这个命令:
create table space TS1 managed by system using ('path1', 'path2', 'path3') |
在给 SMS 容器指定路径时,该路径可以是某个目录的绝对路径或相对路径。如果目录不存在,DB2 会创建一个。如果目录存在,它不能包含任何文件或子目录。
例如,下面这个命令:
create table space ts1 managed by system using ('D:\DIR1') |
指定了目录的绝对路径;因此,如果该目录原本不存在,那么 DB2 将在数据库服务器的 D:
驱动器上创建 DIR1
目录。
下面这条命令:
create tablespace ts2 managed by system using ('DIR1') |
指定相对路径 DIR1
;因此 DB2 将在数据库主目录下创建 DIR1
目录。
以下 SQL 语句用三个容器在三个不同的驱动器或文件系统上创建了一个 SMS 表空间。请注意,表空间名是相同的,下列示例显示了 UNIX/Linux 和 Windows 表空间定义的差别:
create tablespace smstbspc managed by system using ('d:\tbspc1', 'e:\tbspc2', 'f:\ tbspc3') create tablespace smstbspc managed by system using ('/dbase/container1', '/dbase/container2', '/dbase/container3') |
改变(alter)SMS 表空间只能用来更改预取(prefetch)大小。不能使用 alter
命令将容器添加到 SMS 表空间中。 但是,可以在重定向恢复期间重新定义、添加或除去容器。
在 SMS 表空间中,缺省情况下对象增大时,对象文件每次扩展一页。 将大量行插入到表中时,这可能会产生大量 I/O,这会对数据库性能造成负面影响。db2empfa
工具使 DB2 能一次给对象文件分配或扩展一个完整的扩展块。 这个工具可以在数据库级上启用;当它运行时,DB2 将分配空白页以填满指定数据库内所有 SMS 表空间容器中的最后一个扩展块。
注:一旦运行了 db2empfa
工具,就不能撤销它的操作结果。
DMS 表空间
使用数据库管理的空间(Database Managed Space,DMS)表空间时,数据库管理器控制着表空间内的存储分配。在 DMS 表空间内,容器可以是操作系统文件、裸逻辑卷或裸磁盘分区。有了 DMS 表空间,创建该表空间时就预先分配空间。创建 DMS 表空间时,用户必须指定文件、逻辑卷或磁盘分区的名称以及(一个或多个)容器的大小。
对于 DMS 表空间:
- 空间是在创建该表空间时分配的。
- 可以使用
alter tablespace
命令添加或删除表空间容器。 - 添加或删除容器时,会自动并异步地重新均衡数据。
- 可以动态扩展、减少容器的数目或调整其大小。
- 表空间容量只受物理存储器限制。
- 文件系统 I/O 用于 DMS 文件操作。
- 直接 I/O 用于 DMS 原始操作。
DMS 表空间考虑到了可能的最高性能,对于 OLTP 尤其如此。它们还允许进行最灵活的数据放置,因为您可以将表对象(也就是,数据、索引、长型 varchar/LOB 数据)分割到不同的表空间中。
在 Linux 和 UNIX 中,设备容器被映射到底层逻辑卷。在 Windows 中,设备容器被映射到未格式化的磁盘分区。创建了容器的设备不能用于其它任何用途,换句话说,它不能包含任何文件系统,并且不应当被格式化。指定容器的大小时,请确保使用了设备上的所有空间,因为任何未用的空间都不能用于其它任何用途。但是,如果今后要扩展表空间容器或调整表空间容器的大小,那么还可以使用该空间。可以用页数、KB、MB 或 GB 指定容器的大小。
下面是一些创建 DMS 表空间的命令示例:
create tablespace mytbspc managed by database using (device '/dev/rmydisk1' 10000) create tablespace mytbspc managed by database using (device '\\.\G:' 10000) create tablespace mytbspc managed by database using (device '/dev/rmydisk1' 100M) create tablespace mytbspc managed by database using (device '\\.\G:' 100M) |
DB2 还可以使用用于 DMS 容器的文件。指定一个文件时,DB2 将给该文件预先分配指定的大小。对于 DMS 文件,您可以在同一个文件系统或底层卷上拥有容器,这与设备容器不同。
可以用页数、KB、MB 或 GB 指定容器的大小。
更多的一些命令示例:
create tablespace mytbspc managed by database using (file '/dbfiles/ts1c1' 10000) create tablespace mytbspc managed by database using (file 'G:\dbfiles\ts1c1' 10000) create tablespace mytbspc managed by database using (file '/dbfiles/ts1c1' 100M) create tablespace mytbspc managed by database using (file 'G:\dbfiles\ts1c1' 100M) |
对于 DMS 表空间,alter database
命令可以用于:
- 添加容器
- 删除容器
- 扩展容器
- 调整容器的大小,使之更大或更小
- 更改预取大小
下面的图表比较了 SMS 和 DMS 的优点: