DB2的物理结构与逻辑结构、管理原理与Oracle比较类似,当然管理的方法与工具肯定是不同的。
建议创建表空间时,尽量使用大型表空间,因为它一个页可以存放更多的容量与行数,另外v8之前有着一个数据页最多存放255行的限制
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;
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
CREATE SYSTEM TEMPORARY TABLESPACE TEMPSPACE2
PAGESIZE 4 K
MANAGED BY AUTOMATIC STORAGE
EXTENTSIZE 16
OVERHEAD 10.5
PREFETCHSIZE 16
TRANSFERRATE 0.14
BUFFERPOOL IBMDEFAULTBP ;
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 ;
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 ;
db2 "connect to MYDB2"
db2 list tablespaces [show deltail]
注: 创建数据库时至少会创建一个系统编目表空间,一个常规表空间,一个系统临时表空间。
db2 => rename tablespace user2 to user3
db2 => alter tablespace user3 switch online
注:
1. 删除用户表空间,如果有对象跨多个表空间,则必须同时删除这几个表空间。
2. 删除系统临时表空间,必须先创建另一个系统临时表空间,且系统必须存在一个4k页大小的系统临时表空间
db2 list tablespace containers for 2
注:修改表空间时增加容器会发生rebanlance事件,产生IO,所以尽量避免在业务高峰期增加容器,且如果有多个容器需要添加的话,尽量一次性添加完毕。
示例:
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
为所有容器增加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
db2 => alter tablespace user2 extend (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container1' 1000)
db2 => alter tablespace user2 reduce (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container1' 10)
db2 => alter tablespace user2 resize (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container1' 900)
db2 => alter tablespace user2 drop (file '/home/db2inst1/db2inst1/NODE0000/TEST1/container2')
extentsize的设计原则是依据每个表平均大小而定,且创建数据库之后,是不可修改的:
基本经验准则为: <50M 为8 ; 介于50M,500M 为16 ; 介于500M,5G 为32
IBMDEFAULTBP 是默认缓冲池,是create database时指定的,如果没有显式指定,则默认是4k
IBMSYSTEMBP4K
IBMSYSTEMBP8K
IBMSYSTEMBP16K
IBMSYSTEMBP32K
缓冲池是在表空间创建期间进行关联的,必须与表空间有相同的页大小(前面表空间创建示例有提到),更改缓冲池关联使用alter tablespace
设定好pagesize与buffer pool是对应的,创建好buffer pool后,将不能再调整pagesize
db2 => create bufferpool bp3 size 2000 pagesize 8k
db2 => drop bufferpool bp3
创建但是在下一个数据库启动时激活缓冲池
db2 => create bufferpool bp3 deferred size 2000 pagesize 8k
alter bufferpool bp3 size 1000
查看当前数据库的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.
1.一个中等大小的缓冲池,用户临时表空间;
2.一个大型缓冲池,用于索引表空间
3.一个大型缓冲池,用于包含经常访问表的表空间
4.一个小型缓冲池,用户包含访问不多的表、随机访问的表或者循序访问的表的表空间