简介:
在使用DB2的过程中, 对表空间, 容器, 缓冲池三者概念及关系的学习总结。有关表空间, 缓冲池和容器的更多详细操作请参考链接:
IBM DB2V9.7中文手册
容器
- 容器包含于表空间(容器⊂表空间)
每个表空间都有一个或多个容器。您可以认为容器是孩子,而表空间是其父母。每个容器只能属于一个表空间,但是一个表空间可以拥有许多容器。可以将容器添加到 DMS 表空间,或者从 DMS 表空间中删除容器,而且可以更改容器的大小。
表空间
表空间定义
数据库中的所有数据都存储在许多表空间中。可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。表空间类型
由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。根据用途有五种不同的表空间:创建数据库时缺省创建3种:
目录表空间
每个数据库只有一个目录表空间,它是在发出 CREATE DATABASE 命令时创建的。目录表空间被 DB2 命名为 SYSCATSPACE,它保存了系统目录表。总是在创建数据库时创建该表空间。常规表空间:
常规表空间保存表数据和索引。它还可以保存诸如大对象(Large Object,LOB)之类的长数据。每个数据库中必须至少有一个常规表空间。创建数据库时指定该表空间的缺省名为 USERSPACE1。系统临时表空间
系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1。
上面所示的这三个表空间是通过 CREATE DATABASE 命令自动创建的。用户可以通过在该命令中包含表空间说明来覆盖缺省的表空间创建,但是在创建数据库时必须创建一个目录表空间和至少一个常规表空间,以及至少一个系统临时表空间。通过使用 CREATE DATABASE 命令或以后使用 CREATE TABLESPACE 命令,可以创建更多的所有类型的表空间(目录表空间除外).
其它两种类型:
长表空间
用于存储长型或 LOB 表列,它们必须驻留在 DMS(数据库管理的空间) 表空间中。它们还可以存储结构化类型的列或索引数据。如果没有定义长表空间,那么将把 LOB 存储在常规表空间中。长表空间是可选的,缺省情况下一个都不创建。用户临时表空间
存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。
表空间管理
可以用两种不同的方式管理表空间:系统管理的空间(SMS)
SMS 表空间由操作系统进行管理。容器被定义成常规操作系统文件,并且是通过操作系统调用访问的。这意味着所有的常规操作系统功能将处理以下内容:操作系统将缓冲 I/O;根据操作系统约定分配空间;如有必要就自动扩展表空间。但是,不能从 SMS 表空间删除容器,并且仅限于将新的容器添加到分区的数据库。前一节中所说明的那三个缺省表空间都是 SMS。数据库管理的空间(DMS)
DMS 表空间是由 DB2 管理的。可以将容器定义成文件(在创建表空间时将把给定的大小全部分配给它们)或设备。可以通过使用ALTER TABLESPACE 命令来扩展容器。还可以释放未使用的那部分 DMS 容器(从 V8 开始)。
下面是一个示例,向您说明该如何增大容器大小(V7 和 V8 都支持此功能):ALTER TABLESPACE TS1 RESIZE (FILE '/conts/cont0' 2000, DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000)
请注意,只有 V8 才支持将原始容器的大小调整得更小。
表空间设置
可以在创建表空间时给它们指定许多设置,或者也可以稍后使用 ALTER TABLESPACE 语句时指定其设置。页大小(Page size)
定义表空间所使用的页大小。所支持的大小为 4K、8K、16K 和 32K。页大小根据下表限定了可放到表空间中的表的行长度和列数:页大小 行大小限制 列数限制 最大容量 4 KB 4005 500 64 GB 8 KB 8101 1012 128 GB 16 KB 16293 1012 256 GB 32 KB 32677 1012 512 GB
扩展块大小(Extent size)
指定在跳到下一个容器之前将写到当前容器中的页数。存储数据时数据库管理器反复循环使用所有容器。该参数只有在表空间中有多个容器时才起作用。【性能相关】预取大小(Prefetch size)
指定当执行数据预取时将从表空间读取的页数。预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行 I/O 了。。【性能相关】开销(Overhead)和传送速率(Transfer rate)
这些值用于确定查询优化期间的 I/O 成本。这两个值的测量单位都是毫秒,而且它们应当分别是所有容器开销和传送速率的平均值。
CREATE TABLESPACE 语句的示例
下列语句将创建一个常规表空间。所讨论的所有设置都是为了进行说明.CREATE TABLESPACE USERSPACE3 PAGESIZE 8K MANAGED BY SYSTEM USING ('d:\\usp3_cont1', 'e:\\usp3_cont2', 'f:\\usp3_cont3') EXTENTSIZE 64 PREFETCHSIZE 32 BUFFERPOOL BP3 OVERHEAD 24.1 TRANSFERRATE 0.9
查看表空间的属性和容器
- 1.指定 LIST TABLESPACES 命令的 SHOW DETAIL 选项将显示其它信息:
LIST TABLESPACES SHOW DETAIL
缺省情况下,将列出创建数据库时所创建的那三个表空间。
- 2.要列出容器,我们需要使用以上输出中的 Tablespace ID, 以2号为例:
LIST TABLESPACE CONTAINERS FOR 2
- 1.指定 LIST TABLESPACES 命令的 SHOW DETAIL 选项将显示其它信息:
缓冲池
定义
一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。
创建数据库时,会创建一个名为 IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。可以使用 CREATE BUFFERPOOL 语句添加更多的缓冲池。
缓冲池的缺省大小是 BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在 CREATE BUFFERPOOL 命令中指定 SIZE 关键字来覆盖该缺省值。CREATE BUFFERPOOL 语句的示例
CREATE BUFFERPOOL BP3 SIZE 2000 PAGESIZE 8K
该缓冲池被分配给上面的 CREATE TABLESPACE 示例上的 USERSPACE3,并且在创建表空间之前创建了该缓冲池。请注意,缓冲池和表空间的页大小都是 8K,两者是相同的。如果您在创建缓冲池之后创建表空间,则可以省去 CREATE TABLESPACE 语句中的 BUFFER POOL BP3 语法。相反,可以使用 altER TABLESPACE 命令将缓冲池添加到现有的表空间:
ALTER TABLESPACE USERSPACE3 BUFFERPOOL BP3
总结
- 数据库如何保存表空间的可视化图表
既然我们已经描述了表空间和缓冲池是什么以及如何创建它们,那么就让我们研究一下有关如何在数据库中将它们直观地组织起来的示例。
该数据库有 5 个表空间:一个目录表空间、两个常规表空间、一个长表空间和一个系统临时表空间。没有创建用户临时表空间。另外有 8 个容器。
在这个方案中,缓冲池可能如下分配:
将 BP1(4K)分配给 SYSCATSPACE 和 USERSPACE2
将 BP2(8K)分配给 USERSPACE1
将 BP3(32K)分配给 LARGESPACE 和 SYSTEMP1