DB2表空间的管理

表空间的作用

①表空间是用户逻辑对象的存储空间

②表空间在物理层上对应着若干个容器

③容器可以是目录、文件或者裸设备

④表空间是逻辑层与物理层的桥梁

⑤数据库可以有多个表空间

⑥表空间可以有多个容器

db2建表指定表空间语法 db2 指定表空间_表空间

表空间的类型

系统表空间:(syscatspace)

—存储DB2系统编目,即“数据字典”

系统临时表空间:(tempspace1)

—用于存储分组、排序、连接、重组、创建索引等操作的中间结果

用户临时表空间:

—放置应用程序的临时表,默认是不会创建

用户表空间:(userspace1)

—存储用户对象(表、索引等)的空间


临时表空间存放数据库管理器在执行排序连接之类的操作时所需的临时数据,这是因为,这些活动需要额外的空间来处理结果集。

数据库必须至少有一个系统临时表空间,其页大小与目录表空间相同。在缺省情况下,创建数据库时会创建一个名为 TEMPSPACE1 的系统临时表空间。IBMTEMPGROUP 是此表空间的缺省数据库分区组。TEMPSPACE1 的页大小 TEMPSPACE1 是在创建数据库本身时指定的(缺省大小为 4KB)。

用户临时表空间存放使用 DECLARE GLOBAL TEMPORARY TABLE 或 CREATE GLOBAL TEMPORARY TABLE 语句创建的表的临时数据。用户临时表空间不是在创建数据库时缺省创建的。它们还存放已创建临时表的实例化版本。

定义单个临时表空间,建议使它的页大小等于大多数用户表空间所使用的页大小。最好用不同的临时表空间配置和 工作负载进行实验。

因为临时表空间是按顺序以批处理方式访问的。因此,页越大,通常会获得更高的性能,这是因为读取给定的数据量时需要发出的逻辑和物理页请求更少;但同时会浪费掉许多存储空间。

当使用临时表空间重组表时,该临时表空间的页大小必须与该表的页大小匹配

(当使用 SMS 系统临时表空间时,您可能想考虑使用注册表变量 DB2_SMS_TRUNC_TMPTABLE_THRESH。当删除时,为系统临时表创建的文件将被截断为大小为 0。可以使用 DB2_SMS_TRUNC_TMPTABLE_THRESH 来避免访问文件系统,从而潜在地让文件大小不为 0,以避免反复扩展和截断文件对性能造成的影响。)

当存在使用不同页大小的临时表空间时,优化器通常选择其缓冲池容纳的行数最多(大多数情况下就是最大的缓冲池)的临时表空间。通常是给一个临时表空间分配一个足够大的缓冲池,而给其余临时表空间分配较小的缓冲池。(例如,如果目录表空间使用 4 KB 页,而其余表空间使用 8 KB 页,那么最佳临时表空间配置可能是:具有一个大缓冲池的一个 8 KB 临时表空间和一个具有小一些的缓冲池的一个 4 KB 表空间。)

一般情况下,定义具有相同页大小的多个临时表空间没有什么好处。

自动存储器临时表空间不能更改其存储器组关联。如果尝试对自动存储器临时表空间执行重新平衡操作,那么会返回 SQL0109N。要将临时表空间与存储器组相关联,可删除该临时表空间并使用另一存储器组重新创建该临时表空间。如果向存储器组添加存储器路径,那么直到下一次激活数据库,临时表空间才会使用新路径。


表空间存储的类型

系统管理的空间(System-Managed Space,SMS)

—文件后缀为(.TMP)

—表空间的容器是操作系统的目录或者文件夹

—空间的分配和管理由操作系统的文件系统来完成

—提供的优化选项比较少且系能不好

数据库管理的空间(Database-Managed Space,DMS)

—文件后缀为(.LRG)

—表空间容器可以使用文件或者裸设备

—空间的管理由数据库来完成

DMS的自动存储(Automatic Storage With DMS)

—将存储的管理由表空间层面转入数据库层面

—简化了表空间存储的管理

DMS 表空间

自动存储器表空间

SMS 表空间

创建方式

使用 CREATE TABLESPACE 语句的 MANAGED BY DATABASE 子句创建

使用 CREATE TABLESPACE 语句的 MANAGED BY AUTOMATIC STORAGE 子句或者通过完全省略 MANAGED BY 子句创建。如果创建数据库时启用了自动存储器,那么对于您创建的任何表空间,除非您另有指定,否则缺省情况是将其创建为自动存储器表空间

使用 CREATE TABLESPACE 语句的 MANAGED BY SYSTEM 子句创建

初始容器定义和位置

①要求将容器定义为文件或设备。

②必须指定每个容器的初始大小

在创建自动存储器表空间时,您不需要提供容器列表。而是,数据库管理器在与该数据库相关联的所有存储器路径中自动创建容器。数据在所有容器之间均匀地进行分割,以使各条存储器路径的使用程度相同

要求将容器定义为目录名

空间的初始分配

①在创建表空间时进行。与 SMS 表空间的情况相比,扩展数据块更有可能连续。

②对于设备容器而言,扩展数据块中的页始终连续

①对于非临时自动存储器表空间:在创建表空间时分配空间时可以指定表空间的初始大小

②对于临时自动存储器表空间而言,将根据需要来分配空间

根据需要进行。由于文件系统控制存储器的分配,因此降低了页面连续的可能性,这可能会影响某些类型的查询的性能

对表空间容器进行更改

①可以扩展或添加容器。如果在表空间的高水位标记之下添加新空间,那么将对表空间数据进行重新平衡。

②可以缩小或删除容器。如果所删除的空间中包含数据,那么将进行重新平衡

①在缩小表空间大小时,可以删除或减小容器。 ②对数据库添加新存储器或者从中删除存储器时,可以对表空间进行重新平衡,以便在各个容器之间均匀地分布数据

创建后不进行更改,而不是在添加新数据分区时为其添加容器

处理增加存储器需求

可以手动地或自动地(需启用自动调整大小功能)对容器进行扩展,以使其超出最初分配的大小,直到达到文件系统所施加的约束为止

①容器将自动地进行扩展,直到达到文件系统所施加的约束为止。

②如果对数据库添加存储器路径,那么将自动地扩展或创建容器

容器可以增大,直到达到文件系统所施加的容量限制为止。当任何一个容器达到其最大容量时,通常认为表空间已满

能够将不同类型的对象放入不同的表空间

表、相关大对象 (LOB) 的存储器以及索引都可以驻留在不同的表空间中

表、相关大对象 (LOB) 的存储器以及索引都可以驻留在不同的表空间中

(仅限于分区表)索引和索引分区与表数据可以驻留在不同的表空间中

持续维护需求

①添加或扩展容器 ②删除或减小容器 ③降低高水位标记 ④重新平衡

①减小表空间的大小 ②降低高水位标记 ③重新平衡


使用复原功能来重新定义容器

可以使用重定向复原操作来重新定义与表空间相关联的容器

不能使用重定向复原操作来重新定义与表空间相关联的容器,这是因为数据库管理器将管理空间

可以使用重定向复原操作来重新定义与表空间相关联的容器

性能

通常高于 SMS

类似于 DMS

通常低于 DMS 和自动存储器,对于较大的表而言尤其如此

创建表空间

语法:

db2建表指定表空间语法 db2 指定表空间_db2_02


db2建表指定表空间语法 db2 指定表空间_db2表空间的管理_03

指定表空间类型和名称:

db2建表指定表空间语法 db2 指定表空间_db2_04


LARGE创建大表空间

REGULAR创建普通表空间

SYSTEM TEMPORARY创建系统临时表空间

USER TEMPORARY用户临时表空间

tablespace-name指定表空间的名称

db2建表指定表空间语法 db2 指定表空间_表空间_05


DATABASE PARTITION GROUP db-partition-group-name为表空间指定数据库分区组

PAGESIZE 指定表空间使用的数据页大小

db2建表指定表空间语法 db2 指定表空间_db2_06


MANAGED BY指定表空间存储的管理方式

EXTENTSIZE指定表空间区的大小

db2建表指定表空间语法 db2 指定表空间_表空间_07


PREFETCHSIZE指定预取页的个数

BUFFERPOOL指定表空间所使用的缓冲池

db2建表指定表空间语法 db2 指定表空间_数据库_08


•用于确定查询优化期间的I/O成本,单位是毫秒

Overhead=平均寻道时间+(((1/磁盘转速)*60*1000)/2)

Transrate=(1/传送速率)*1000/1024000*4096(4096是指4K的页)

NO FILE SYSTEM CACHING 不使用文件系统的缓存特性

FILE SYSTEM CACHING使用文件系统的缓存特性

DROPPED TABLE RECOVERY设置是否启用已删除表的恢复特性

维护表空间

查看表空间:db2 list tablespaces [show detail]
查看表空间的容器:db2 list tablespace containers for tablespace_id [show detail]

修改表空间:

alter tablespace tablespace_name

db2建表指定表空间语法 db2 指定表空间_db2表空间的管理_09

例如:添加和扩展容器

db2建表指定表空间语法 db2 指定表空间_数据库_10

db2 alter tablespace tablespace_name add  (device ‘/dev/rhd1’ 1000, device ‘/dev/rhd2’ 1000);

例如:扩展容器

db2建表指定表空间语法 db2 指定表空间_数据库_11

db2 alter tablespace tablespace_name extend ( all 1000);

例如:删除容器

db2建表指定表空间语法 db2 指定表空间_数据库_12

db2 alter tablespace tablespace_name drop ( file ‘/db2path1/datafile1’);

例如:重命名表空间

db2 rename tablespace_old to tablespace_new

例如:删除表空间

db2 drop tablespace_name

多温度存储器

概述:

•将访问频率不同的数据放置在不同的存储空间中

•引入了存储组(storage group)的概念

•方便DBA对不同热度的数据进行管理

存储器组:

•存储数据的存储路径的集合

•只有自动存储表空间才能使用存储器组

•一个表空间只能与一个存储器组相关联

•一个存储器组可以与多个表空间相关联

db2建表指定表空间语法 db2 指定表空间_表空间_13

1.查看存储器组

db2pd –d db_name -storagegroup

db2 "select varchar(storage_group_name,20) as storage_group,storage_group_id,varchar(db_storage_path,20) as storage_path,db_storage_path_state,(fs_total_size / 1000000) as total_path_MB,(sto_path_free_size / 1000000) as path_free_MB from table(admin_get_storage_paths('',-1)) as T1";

2.创建存储器组

db2建表指定表空间语法 db2 指定表空间_db2表空间的管理_14

3.修改存储器组

db2建表指定表空间语法 db2 指定表空间_数据库_15

例如:

db2 drop stogroup storage_group_name

4.表空间与存储器组

•一个表空间只能与一个存储器组相关联

•一个存储器组可以与多个表空间相关联

•创建表空间时指定存储器组

db2 create tablespace tablespace_name using stogroup storagegroup_name;

•修改表空间使用存储器组

db2 alter tablespace tablespace_name using stogroup storagegroup_name;

•查看表空间与存储器组的关系

db2 "select TBSPACE,SGNAME,SGID from syscat.tablespaces";

实践一:创建表空间

1、创建表空间最简单的命令:
db2 create tablespace mysimple;

2、创建一个大型表空间
db2 create large tablespace mylarge;

3、创建一个用户临时表空间
db2 create user temporary tablespace myusertemp;

4、创建一个4K页大小的表空间
db2 create tablespace my4k pagesize 4k;

5、创建一个数据库管理的表空间
db2 "create tablespace mydms managed by database using (file '/home/db2instl/dbpath/mydms01.dbf' 10m , file '/home/db2instl/dbpath/mydms02.dbf' 10m)";

注:创建固定页大小的表空间时必须有相对应页大小的的缓冲池

实践二:维护表空间

1、查看表空间
db2 list tablespaces
db2 list tablespaces show detail

2、查看表空间的容器
db2 list tablespace containers for 8
db2 list tablespace containers for 8 show detail

3、为表空间添加一个容器
db2 "alter tablespace mydms add  ( file '/home/db2instl/dbpath/mydms03.dbf' 10m )";

4、修改容器的大小
db2 "alter tablespace mydms resize  (file '/home/db2instl/dbpath/mydms03.dbf' 5m)";

5、删除容器
db2 "alter tablespace mydms drop (file '/home/db2instl/dbpath/mydms03.dbf')";

6、重命名表空间
db2 rename tablespace mydms to myrename;

7、删除表空间
db2 drop tablespace myrename;

实践三:多温度存储器

1、查看存储器组
db2pd -d mydb -storagegroup

db2 "select varchar(storage_group_name,20) as storage_group,storage_group_id,varchar(db_storage_path,20) 
as storage_path,db_storage_path_state,(fs_total_size / 1000000) as total_path_MB,
(sto_path_free_size / 1000000) as path_free_MB from table(admin_get_storage_paths('',-1)) as T1";

2、创建存储器组
db2 "create stogroup sg1 on '/home/db2instl/sgpath'"

3、创建表空间,指定存储器组
db2 create tablespace mysg_sb using stogroup sg1;

4、查看表空间和存储器组的关系
db2 "select TBSPACE,SGNAME,SGID from syscat.tablespaces";

5、修改表空间的存储器组
db2 alter tablespace mysg_sb using stogroup IBMSTOGROUP;

6、删除存储器组
db2 drop stogroup sg1

注:删除存储器组时,必须修改依赖此存储器的表空间去依赖另外的存储器组或删除依赖此存储器的表空间