【DB2】 管理tablespace 与 container 、buffer pool

            DB2的物理结构与逻辑结构、管理原理与Oracle比较类似,当然管理的方法与工具肯定是不同的。


一.表空间基本管理

 
建议创建表空间时,尽量使用大型表空间,因为它一个页可以存放更多的容量与行数,另外v8之前有着一个数据页最多存放255行的限制

1.1 user tablespace

windows下创建表空间

CONNECT TO MYDB1;
--在command editor中,命令是可以换行的
CREATE  REGULAR  TABLESPACE USER2
PAGESIZE 4 K  
MANAGED BY DATABASE  
USING ( FILE 'C:\INST1\NODE0000\MYDB1\container1' 5120 )
EXTENTSIZE 16
OVERHEAD 10.5
PREFETCHSIZE 16
TRANSFERRATE 0.14
BUFFERPOOL  USER2_BUFFERPOOL  
DROPPED TABLE RECOVERY ON;

CONNECT RESET;


Linux下创建表空间

CREATE  REGULAR  TABLESPACE USER2
PAGESIZE 4 K  
MANAGED BY DATABASE  
USING ( FILE '/home/db2inst1/db2inst1/NODE0000/TEST1/container1' 5120 )
EXTENTSIZE 16
OVERHEAD 10.5
PREFETCHSIZE 16
TRANSFERRATE 0.14
BUFFERPOOL  IBMDEFAULTBP  
DROPPED TABLE RECOVERY ON;

注:最好是将container的目录先建立好,并手动设置读写权限775,不要让create tablespace命令去隐含创建,因为它会将目录权限置为700,会导致其他其他实例不能在此创建container


1.2 system temporary tablespace


使用managed by automatic storage.就不要指定container

 
 CREATE  SYSTEM TEMPORARY  TABLESPACE TEMPSPACE2
 PAGESIZE 4 K  
 MANAGED BY AUTOMATIC STORAGE
 EXTENTSIZE 16
 OVERHEAD 10.5
 PREFETCHSIZE 16
 TRANSFERRATE 0.14
 BUFFERPOOL  IBMDEFAULTBP ;
 

 针对非自动存储的DMS表空间 就需要指定container

 CREATE  SYSTEM TEMPORARY  TABLESPACE TEMPSPACE2
 PAGESIZE 4 K  
 MANAGED BY DATABASE
 USING ( FILE '/home/db2inst1/db2inst1/NODE0000/test1/containertemp1' 5120 )
 EXTENTSIZE 16
 OVERHEAD 10.5
 PREFETCHSIZE 16
 TRANSFERRATE 0.14
 BUFFERPOOL  IBMDEFAULTBP ;
 
 

1.3 user temporary tablespace

 
 CREATE  USER TEMPORARY  TABLESPACE USERTEMP1
 PAGESIZE 4 K  
 MANAGED BY DATABASE  
 USING ( FILE '/home/db2inst1/db2inst1/NODE0000/MYDB2/usercontainer1' 5120 )
 EXTENTSIZE 16
 OVERHEAD 10.5
 PREFETCHSIZE 16
 TRANSFERRATE 0.14
 BUFFERPOOL  IBMDEFAULTBP ;
 


1.4 查看表空间信息

 
 db2 "connect to MYDB2"
 
 db2 list tablespaces [show deltail]
 
 注: 创建数据库时至少会创建一个系统编目表空间,一个常规表空间,一个系统临时表空间。


 1.5 重命名表空间

 db2 => rename tablespace user2 to user3
 

 1.6 将表空间从脱机状态切换为联机

 db2 => alter tablespace user3 switch online
 
 注:

1. 删除用户表空间,如果有对象跨多个表空间,则必须同时删除这几个表空间。
 
 2. 删除系统临时表空间,必须先创建另一个系统临时表空间,且系统必须存在一个4k页大小的系统临时表空间

 

二. 容器 container基本管理,类似Oracle数据文件概念

2.1  列出某一个表空间容器情况

 db2 list tablespace containers for 2
 
 
 注:修改表空间时增加容器会发生rebanlance事件,产生IO,所以尽量避免在业务高峰期增加容器,且如果有多个容器需要添加的话,尽量一次性添加完毕。
 

2.2 为非自动存储DMS表空间添加容器

 示例:

db2 => alter tablespace userspace1 add (device '/home/db2inst1/db2inst1/NODE0000/MYDB2/T0000002/C0000001.LRG' 10000, device '/home/db2inst1/C0000001.LRG' 10000)


 db2 => alter tablespace user2 add (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container2' 10000)
 db2 => list tablespace containers for 5

            Tablespace Containers for Tablespace 5

 Container ID                         = 0
 Name                                 = /home/db2inst1/db2inst1/NODE0000/TEST1/container1
 Type                                 = File

 Container ID                         = 1
 Name                                 = /home/db2inst1/db2inst1/NODE0000/TEST1/container2
 Type                                 = File
 
 
 

 2.3 调整非自动存储DMS表空间的容器大小

为所有容器增加10000个page,注意extent不会引发rebalance.
 如果表空间是automatic storage,则会收到报错:
 db2 => alter tablespace user1 extend (all 10000)
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL20318N  The ALTER TABLESPACE statement failed because the change is not
allowed for the type of table space. Table space name: "USER1". Table space
type: "AUTOMATIC STORAGE". Incompatible clause: "EXTEND".  SQLSTATE=42858

仅为一个container扩展1000个page

 db2 => alter tablespace user2 extend (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container1' 1000)
 

仅为一个container缩减10个page

db2 => alter tablespace user2 reduce (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container1' 10)

仅为一个container重新指定一个可行的大小

db2 => alter tablespace user2 resize (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container1' 900)

 为DMS表空间减少或删除容器

db2 => alter tablespace user2 drop (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container2')
 

  extentsize的设计原则

 extentsize的设计原则是依据每个表平均大小而定,且创建数据库之后,是不可修改的:
 基本经验准则为: <50M  为8 ; 介于50M,500M  为16 ; 介于500M,5G 为32


三. 缓冲池基本管理


3.1 DB2支持几种尺寸的缓冲池:

IBMDEFAULTBP 是默认缓冲池,是create database时指定的,如果没有显式指定,则默认是4k
IBMSYSTEMBP4K
IBMSYSTEMBP8K
IBMSYSTEMBP16K
IBMSYSTEMBP32K

缓冲池是在表空间创建期间进行关联的,必须与表空间有相同的页大小(前面表空间创建示例有提到),更改缓冲池关联使用alter tablespace
设定好pagesize与buffer pool是对应的,创建好buffer pool后,将不能再调整pagesize

3.2 创建缓冲池

db2 => create bufferpool bp3 size 2000 pagesize 8k
db2 => drop bufferpool bp3

创建但是在下一个数据库启动时激活缓冲池
db2 => create bufferpool bp3 deferred size 2000 pagesize 8k

3.3 修改缓冲池:

alter bufferpool bp3 size 1000


3.4 查询缓冲池状态

查看当前数据库的bufferpool状态
db2 => select * from syscat.bufferpools

查看现有缓冲池被分配到哪个表空间
db2 => select tbspace,bufferpoolid from syscat.tablespaces

TBSPACE                                                                                     BUFFERPOOLID
----------------------------------------------------------------------------- ------------
SYSCATSPACE                                                                             1
TEMPSPACE1                                                                               1
USERSPACE1                                                                              1
SYSTOOLSPACE                                                                          1
USER1                                                                                            1
USER3                                                                                            1
TEMPSPACE2                                                                                1

  7 record(s) selected.

 

3.5 针对初学者建立缓冲池的建议:

1.一个中等大小的缓冲池,用户临时表空间;
2.一个大型缓冲池,用于索引表空间
3.一个大型缓冲池,用于包含经常访问表的表空间
4.一个小型缓冲池,用户包含访问不多的表、随机访问的表或者循序访问的表的表空间




你可能感兴趣的:(----DB2,Foundation)