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.一个小型缓冲池,用户包含访问不多的表、随机访问的表或者循序访问的表的表空间