http://blog.itpub.net/25744374/viewspace-750054/
DB2中,表空间是数据库与这个数据库中存储的表之间的逻辑层。表空间在数据库中创建,表在表空间中创建。容器是一个物理存储设备。它可以由目录名、设备名或文件名标识。容器被分配给表空间。表空间可以跨许多容器(类似于Oracle中datafile的概念),这意味着可以突破操作系统对于一个容器可以包含的数据量的限制。DB2 支持三种表空间:
· 系统管理的空间(System-Managed Space,SMS):在这里,由操作系统的文件系统管理器分配和管理空间。在 DB2 9 之前,如果不带任何参数创建数据库或表空间,就会导致所有表空间作为 SMS 对象创建。
· 数据库管理的空间(Database-Managed Space,DMS):在这里,由数据库管理程序控制存储空间。这种表空间本质上是一种特殊用途的文件系统实现,可以最好地满足数据库管理程序的需要。
· DMS 的自动存储(Automatic Storage With DMS):自动存储实际上不是一种单独的表空间类型,而是一种处理 DMS 存储的不同方式。DMS 容器需要比较多的维护,在 DB2 V8.2.2 中引入了自动存储,作为简化空间管理的方式。
SMS 表空间需要的维护非常少。但是,与 DMS 表空间相比,SMS 表空间提供的优化选项少而且性能不好。
SMS、DMS与自动存储
特性 | SMS | DMS | 自动存储 |
是否分段(Striping)? | 是 | 是 | 是 |
默认类型 | Version 8 | 无 | Version 9 |
对象管理 | 操作系统 | DB2 | DB2 |
空间分配 | 按需增长/收缩 | 预先分配;大小可以收缩和增长,但是需要 DBA 干预。 | 预先分配;可以自动增长。 |
管理的简便性 | 最好;很少需要调优,甚至不需要 | 好,但是需要一些调优(例如, EXTENTSIZE PREFETCHSIZE | 最好;很少需要调优,甚至不需要 |
性能 | 非常好 | 最好;可通过利用原始容器多获得 5% 到 10% 的收益 | 最好;但是,可以不使用原始容器 |
表空间最大大小 | 64GB(4K 页面) | 2TB(4K 页面) | 2TB(4K 页面) |
除了使用 SMS 表空间可以简化管理之外,这两种存储模型之间最显著的差异是表空间的最大大小。在使用 SMS 时,DBA 最多只能在表空间中放 64GB 的数据。将页面大小改为 32K,可以将这个限制扩大到 512GB,但代价是每个页面上的可用空间可能会更少。改为 DMS 模型会将表空间限制扩大到 2TB(4K 页面大小的情况下)。如果将页面大小改为 32K,可用空间可以增长到 16TB。尽管还有让表大小突破64GB 限制的其他方法,但是最简单的方法可能是一开始就使用 DMS 表空间。
DMS与自动存储
DB2 8.2.2 引入了自动存储的概念。自动存储允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。在 DB2 9 中,数据库在创建时将启用自动存储,除非 DBA显式地覆盖这个设置。
启用自动存储的数据库有一个或多个相关联的存储路径。表空间可以定义为 “由自动存储进行管理”,它的容器由 DB2 根据这些存储路径进行分配。数据库只能在创建时启用自动存储。对于在最初没有启用自动存储的数据库,不能在以后启用这个特性。同样,对于在最初启用了自动存储的数据库,也不能在以后禁用这个特性。
特性 | 非自动存储 | 自动存储 |
容器的创建 | 必须在创建表空间时显式地提供容器。 | 不能在创建表空间时提供容器;它们将由 DB2 自动地分配。 |
容器大小的调整 | 在默认情况下,表空间大小的自动调整是关闭的(AUTORESIZE NO)。 | 在默认情况下,表空间大小的自动调整是打开的(AUTORESIZE YES)。 |
初始大小 | 不能使用 INITIALSIZE 子句指定表空间的初始大小。 | 使用 INITIALSIZE 子句指定表空间的初始大小。 |
容器的修改 | 可以使用 ALTER TABLESPACE 语句(ADD、DROP、BEGIN NEW STRIPE SET 等等)执行容器操作。 | 不能执行容器操作,因为由 DB2 控制空间管理。 |
管理的简便性 | 可以使用重定向的恢复操作重新定义与表空间相关联的容器。 | 不能使用重定向的恢复操作重新定义与表空间相关联的容器,因为由DB2 控制空间管理。 |