DB2表空间与缓冲池

引:

在ITS产品的安装guideline中提到了以下初始化数据库的章节

The following is a sample script that you can run to prepare DB2 for installing the InfoSphere Traceability Server. The script creates the required database, configuresthe bufferpool, tablespace, and temporary tablespace that is required for installing the InfoSphere Traceability Server.
You can run this script by logging in as the db2inst1 user and by running the following command:

db2 -tvf CREATE.sql
The following SECTION displays the details OF the script.
force application ALL;
DROP DATABASE tsdb;
CREATE DATABASE tsdb;
CONNECT TO tsdb;
CREATE USER tsdbuser
GRANT CONNECT,implicit_schema,createtab ON DATABASE TO USER
"create bufferpool bp32k size 100 pagesize 32k";
"create tablespace tbsp32k pagesize 32k managed by system using
('/home/db2inst1/db2inst1/tbsp/tbsp32k') bufferpool bp32k";
"create bufferpool bp32ktmp size 100 pagesize 32k";
"create system temporary tablespace tbsp32ktmp pagesize 32k managed by system using
('/home/db2inst1/db2inst1/tbsp/tbsp32ktmp') bufferpool bp32ktmp";

为什么要自己建立表空间(tablespace)与缓冲池(bufferpool)呢?表空间和缓冲池的设计和调优会对 DB2 服务器的性能产生深远的影响。这篇文章不涉及具体的调优手段与方法而会涉及对于表空间与缓冲池的理解。

正文:

一. 表空间定义

表空间是数据库及存储在该数据库中的表之间的逻辑层。表空间在数据库中创建,表在表空间中创建。

使用表空间的一个明显的好处是能够把数据合理的分布存储在不同的磁盘上或者存储在磁盘的不同位置上,有助于提高数据存取的效率。
数据库中的所有数据都存储在许多表空间中。可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。这就是必须先connect一个db才能建立表空间的原因。由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。根据用途有五种不同的表空间:
目录表空间
每个数据库只有一个目录表空间,它是在发出 CREATE DATABASE 命令时创建的。目录表空间被 DB2 命名为 SYSCATSPACE,它保存了系统目录表。总是在创建数据库时创建该表空间。
常规表空间
常 规表空间保存表数据和索引。它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。我们将在本文后面定义 DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。每个数据库中必须至少有一个常规表空间。创建数据库时指定该表空间的缺省名为 USERSPACE1。
长表空间 (非必须)
长表空间用于存储长型或 LOB 表列,它们必须驻留在 DMS 表空间中。它们还可以存储结构化类型的列或索引数据。如果没有定义长表空间,那么将把 LOB 存储在常规表空间中。长表空间是可选的,缺省情况下一个都不创建。
系统临时表空间
系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1。
用户临时表空间 (非必须)
用户临时表空间存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。

二. 表空间管理

1.管理分类

DB2 的表空间按管理方式分为两种:系统管理空间(System Management Space,SMS)和数据库管理空间(Database Management Space,DMS)。:
系统管理的空间(SMS)
SMS 表空间由操作系统进行管理。容器被定义成常规操作系统文件,并且是通过操作系统调用访问的。这意味着所有的常规操作系统功能将处理以下内容:操作系统将缓 冲 I/O;根据操作系统约定分配空间;如有必要就自动扩展表空间。但是,不能从 SMS 表空间删除容器,并且仅限于将新的容器添加到分区的数据库。
数据库管理的空间(DMS)
DMS 表空间是由 DB2 管理的。可以将容器定义成文件(在创建表空间时将把给定的大小全部分配给它们)或设备。分配方法和操作系统允许多少 I/O,DB2 就可以管理多少 I/O。可以通过使用 altER TABLESPACE 命令来扩展容器。还可以释放未使用的那部分 DMS 容器(从 V8 开始)。

2. SMS与DMS的对比

SMS每个容器是操作系统的文件空间中的一个目录;DMS每个容器是一个固定的、预分配的文件,或是物理设备。

SMS的管理比较简单,由操作系统自动管理,空间的大小随数据量的变化系统自动调整。

DMS是由数据库管理的,空间大小在创建时确定,空间不够时要手工添加或删除部分数据以释放空间。

大多数情况下,DMS的性能比SMS好。
特性 SMS DMS
能够在表空间中动态增加容器的数目吗 N Y
能够把索引数据存放到不同表空间的表中吗 N Y
能够把大对象数据存放到不同表空间的表中吗 N Y
表可以分散存放到多个表空间中吗 N Y
仅在需要时才分配空间吗 Y N
表空间可以被放在不同的磁盘中吗 Y N
创建之后,区段大小能够改变吗 N N

三. 如何创建和查看表空间

当 您创建数据库时,将创建三个表空间(SYSCATSPACE、TEMPSPACE1 和 USERSPACE1)。通过使用 DB2 命令窗口(Command Window)或 UNIX 命令行,创建一个名为 testdb 的数据库,连接至该数据库,然后列出表空间:

CREATE DATABASE testdb
CONNECT TO testdb
LIST TABLESPACES

LIST TABLESPACES 命令的输出
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal

上面所示的这三个表空间是通过 CREATE DATABASE 命令自动创建的。用户可以通过在该命令中包含表空间说明来覆盖缺省的表空间创建,但是在创建数据库时必须创建一个目录表空间和至少一个常规表空间,以及至 少一个系统临时表空间。通过使用 CREATE DATABASE 命令或以后使用 CREATE TABLESPACE 命令,可以创建更多的所有类型的表空间(目录表空间除外)

四. 如何查看表空间的属性和容器

指定 LIST TABLESPACES 命令的 SHOW DETAIL 选项将显示其它信息:

LIST TABLESPACES SHOW DETAIL

清单 2显示了 USERSPACE1 表空间的输出。缺省情况下,将列出创建数据库时所创建的那三个表空间。
清单 2. LlST TABLESPACES SHOW DETAIL 命令的输出
Tablespaces for Current Database
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 336
Useable pages = 336
Used pages = 336
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 16
Number of containers = 1

要列出容器,我们需要使用以上输出中的 Tablespace ID:

LIST TABLESPACE CONTAINERS FOR 2

清单 3. LIST TABLESPACE CONTAINERS 命令的输出
Tablespace Containers for Tablespace 2
Container ID = 0
Name = C:\\DB2\\NODE0000\\SQL00004\\SQLT0002.0
Type = Path

该命令将列出指定表空间中的所有容器。如上所示的路径指向容器物理上所在的位置。

五.表空间设置

可以在创建表空间时给它们指定许多设置,或者也可以稍后使用 ALTER TABLESPACE 语句时指定其设置。
页大小(Page size)
定义表空间所使用的页大小。所支持的大小为 4K、8K、16K 和 32K。
扩展块大小(Extent size)
指定在跳到下一个容器之前将写到当前容器中的页数。存储数据时数据库管理器反复循环使用所有容器。该参数只有在表空间中有多个容器时才起作用。
预取大小(Prefetch size)
指定当执行数据预取时将从表空间读取的页数。预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行 I/O 了。当数据库管理器确定顺序 I/O 是适当的,并且确定预取操作可能有助于提高性能时,它就选择预取操作。
开销(Overhead)和传送速率(Transfer rate)
这 些值用于确定查询优化期间的 I/O 成本。这两个值的测量单位都是毫秒,而且它们应当分别是所有容器开销和传送速率的平均值。开销是与 I/O 控制器活动、磁盘寻道时间和旋转延迟时间相关联的时间。传送速率是将一个页读入内存所必需的时间量。它们的缺省值分别是 24.1 和 0.9。可以根据硬件规格计算这些值。

七. 创建表空间SQL举例:

例一:在Windows上创建一个SMS表空间:
CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM USING (‘d:\acc_tbsp’,’e:\acc_tbsp’,’f:\acc_tbsp’)
完成的结果为在D、E、F三个磁盘上创建了三个名称为acc_tbsp的文件夹,每个文件夹下面都有一个名为SQLTAG.NAM的文件。

例二:删除例一所创建的SMS表空间。
DROP TABLESPACE RESOURCE
运行完这条命令,相应的表空间会从DB2注册表中删除,但是磁盘上的三个文件夹仍然存在,需要手工删除。

例三:在Windows上创建一个DMS表空间,使用各自有5000页的两个文件容器:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (FILE ‘d:\db2data\acc_tbsp’ 5000, FILE ‘e:\db2data\acc_tbsp’ 5000)
运行结果为:在D、E磁盘的db2data文件夹下面各创建了一个名为acc_tbsp的文件,大小都为20000K(默认情况下每页大小为4K)。

例四:在例三所创建的表空间中添加一个容器。
ALTER TABLESPACE RESOURCE ADD(FILE ‘f:\db2data\acc_tbsp’ 5000)
运行的结果为在RESOURCE表空间中包含了三个容器(文件):d:\db2data\acc_tbsp、 e:\db2data\acc_tbsp、 f:\db2data\acc_tbsp。

例五:用RESIZE子句更改例三所创建的表空间的容器的大小。
ALTER TABLESPACE RESOURCE RESIZE (file ‘d:\db2data\acc_tbsp’ 8000, file ‘e:\db2data\acc_tbsp’ 8000, file ‘f:\db2data\acc_tbsp’ 8000)
每个容器(文件)的大小变为8000页。把容器的容量变大不会出错,但是如果容器中的数据已经充满,再把容器的容量缩小,则会引起错误。

例六:用EXTEND子句更改例三所创建的表空间的容器的大小。
ALTER TABLESPACE RESOURCE EXTEND (file ‘d:\db2data\acc_tbsp’ 1000, file ‘e:\db2data\acc_tbsp’ 1000, file ‘f:\db2data\acc_tbsp’ 1000)
该命令的运行结果为在原有容量的基础之上,每个容器再增加1000页。

例七:删除例三中创建的DMS表空间。
DROP TABLESPACE RESOURCE
运行的结果为在DB2的注册表中把RESOURCE表空间删除,同时在磁盘上把相对应的文件夹和文件都一起自动删除。

例八:在UNIX上创建一个DMS表空间,使用各有10000页的3个逻辑卷:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (DEVICE ‘/dev/rdblv6’ 10000, DEVICE ‘/dev/rdblv7’ 10000, DEVICE ‘/dev/rdblv8’ 10000)
上面语句中提到的UNIX设备必须已经存在,且实例拥有者和SYSADM组必须能够写入它们。

例九:创建系统临时表空间。
CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp MANAGED BY SYSTEM USING(‘d:\tmp_tbsp’,’e:\tmp_tbsp’)
系统临时表只能存储在系统临时表空间中,所以数据库必须始终至少有一个系统临时表空间。

例十:创建用户临时表空间。
CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE USING(FILE ‘d:\db2data\user_tbsp’ 5000, FILE ‘e:\db2data\user_tbsp’ 5000)
用户临时表空间用于存储已说明的临时表(用 DECLARE GLOBAL TEMPORARY TABLE 语句定义)

例十一:用RENAME语句给表空间重命名
RENAME TABLESPACE RESOURCE TO RES1
用该语句给表空间重命名之后,将自动更改所有引用该表空间的目录记录,所以无须关心该表空间中的个别对象。

例十二:在RESOURCE表空间中创建一张名为T1的表
CREATE TABLE T1(ABC INT) IN RESOURCE

例十三:创建一个表空间
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

九. 缓冲池

一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。当考虑将缓冲池用于一个或多个表空间时,必须保证表空间页大小和缓冲池页大小对于缓冲池所“服务”的所有表空间而言都是一样的。一个表空间只能使用一个缓冲池。
创 建数据库时,会创建一个名为 IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。可以使用 CREATE BUFFERPOOL 语句添加更多的缓冲池。缓冲池的缺省大小是 BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在 CREATE BUFFERPOOL 命令中指定 SIZE 关键字来覆盖该缺省值。足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘 I/O 这一最耗时的操作。大型缓冲池还会对查询优化产生影响,因为更多的工作可在内存中完成。
如何查看缓冲池属性
通过查询 SYSCAT.BUFFERPOOLS 系统视图可以列出缓冲池信息:
SELECT * FROM SYSCAT.BUFFERPOOLS
BPNAME BUFFERPOOLID NGNAME NPAGES PAGESIZE ES
—————— ———— —————— ———– ———– —
IBMDEFAULTBP 1 – 250 4096 N
1 record(s) selected.

要找出哪个缓冲池被分配给了表空间,请运行下面这个查询:
SELECT TBSPACE, BUFFERPOOLID FROM SYSCAT.TABLESPACES
TBSPACE BUFFERPOOLID
—————— ————
SYSCATSPACE 1
TEMPSPACE1 1
USERSPACE1 1
3 record(s) selected.

可以在上一个查询中找到 BUFFERPOOLID,该查询使您能够看到每个表空间与哪个缓冲池相关联。
参考文章:
http://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html

http://www.chinaunix.net/jh/22/421130.html

Leave a Comment.