DB2数据库管理

来源:互联网 发布:三星短信恢复软件 编辑:程序博客网 时间:2024/06/06 05:47
 

数据库结构

a) 一个实例可以包含多个数据库,一个数据库只能归属于一个实例。

b) 每个数据库能有多个表空间,每个表空间只能属于一个数据库。

c) 逻辑结构:实例-->数据库-->表空间-->

d) 存储模型:表空间-->容器-->extent-->page

e) DB2读取数据是按照块(extent)读取的,块是一组连续的页。当一个表空间有多个容器的时候,为了数据均衡分布,DB2在写数据的时候按照循环的方式写容器,即在一个容器写满一个extent后,开始在第二个容器继续写,周而复始,这样能够确保数据均衡分布在多个容器上,提高读写效率。

 

创建数据库

f) 建数据库

Db2 “create database testdb automatic storage yes on /dbauto dbpath on /database using codeset UTF-8 territory CN collate using system”

g) 连接数据库

Db2 connect to testdb

h) 创建缓冲池(size页数,pagesize页大小,建库时DB2会默认创建一个IBMDEFAULTBP缓冲池,如果不指定,pagesize默认为4K

Db2 “create bufferpool bp32k size 10000 pagesize 32k"

 

一些重要配置文件的说明:

1.SQLDBCONF :数据库参数配置文件,使用get db cfg/update db cfg读取或修改。

2.SQLBP.* :缓冲池控制文件,使用 alter bufferpool控制

3.SQLSPCS.* : 表空间控制文件,使用 list/alter tablespace控制

4.Db2rhist.asc : 数据库历史文件,使用list history浏览。

5.SQLOGCTL.LFH.* : 数据库日志控制文件,无法浏览或人工修改。

      

Using CODESET codeset(编码集) TERRITORY territory(区域):数据库一旦创建,编码就无法改变了。GBK支持中文编码,UTF-8支持几乎所有语言,默认UTF-8

创建表空间

i) 创建数据库管理的数据表空间(no file system caching目的是关闭文件系统缓存,因为DB2使用了BP缓存数据,不必再用文件系统缓存,这也是默认选项)

Db2 “create  large tablespace tbs_data pagesize 32k managed by database using (file ‘/data1/tbs_data/cont0’ 100M,file ‘/data1/tbs_data/cont1’ 100M) extentsize 32 prefetchsize automatic bufferpool  bp32k no file system caching”

j) 创建系统管理的临时表空间

Db2 “create temporary tablespace tbs_tmp pagesize 32k managed by system using (‘/data1/tbs_tmp’) bufferpool bp32k” 

k) 创建SMS管理的用户临时表空间

Db2 “create user temporary tablespace tbs_usr_tmp pagesize 32k managed by system using (‘/data1/tbs_usrtmp’) bufferpool bp32k”

l) 创建自动存储管理的表空间

i. Db2 “create tablespace tbs_index pagesize 32k bufferpool bp32k”

ii. Db2 “create tablespace tbs_data2 initialsize 100M increasesize 100M maxsize 1000G”

表空间管理分为SMSmanaged by system)、DMSmanaged by database)和自动存储管理。

l DMS 表空间在创建时即分配空间,创建之后可通过命令对表空间容器进行增删改查。该类型支持文件和裸设备。对于数据来说,建议使用DMS管理。

l SMS表空间的优点是比较容易管理,确定是性能比DMS5%--10%左右。该类型只支持目录,无需指定大小,只要所属文件系统有空间即可被使用。对于临时表空间,建议使用SMS管理。

自动存储管理简化表空间的监控和管理,创建表空间时,只需提供表空间名,无需指定容器类型和大小。自动存储管理结合了DMSSMS,数据被存放在建库时指定的ON目录。只有建库启用了automatic storage yes ,表空间才支持自动存储管理。

每个表空间都有一个BP与之对应,多个表空间可以共享一个BP,但要求BPpagesize大小必须与表空间的pagesize匹配,否则失败。

大对象数据(CLOBBLOB)是直接从磁盘上获取的,无法通过BP缓存,因此可以考虑将大数据创建到独立的表空间,并使用file system caching

 

表空间维护

1) SMS表空间:只要容器目录有空间,就不会出现表空间满。

2) 自动存储管理表空间:只要自动存储路径有空间,就不会出现表空间满。

3) DMS表空间:要随时监控,防止空间满而无法插入数据。

i. Db2 list tablespaces [show detail]db2 list tablespace containers for <tablespace_id> [show detail]

ii. Db2pd -d <db_name> tablespaces

iii. Db2 get snapshot for tablespaces on <db_name>

iv. Sysibmadm.snaptbsp sysibmadm.snapcontainer管理视图

4) 表空间的更改(扩容)

1.SMS类型,不支持表空间容器的更改,只能更改容器路径所属文件系统的大小。

2.DMS类型,ADD增加容器,DROP删除容器,EXTEND扩展现有容器大小,REDUCE缩减现有容器大小,RESIZE重新设定容器大小。对于ADDDROP,表空间会发生数据重新平衡,对于REDUCERESIZE,须确保更改后容器还有足够空间,否则失败。

3.对于自动存储管理表空间,无法在表空间内进容器更改,只能在数据库级别,使用add storage on选项为数据库添加新的存储路径。命令是:

4.Db2 alter database sample add storage on db_path

 

*DMS表空间满了的处理方案:

1.容器对应的存储还有未分配的空间,可alter tablespace extendresize 扩展大小。

2.表空间容器对应的存储没有剩余空间,alter tablespace add新的容器(会进行rebalance

3.通过alter tablespace begin new stripe set选项。Begin new stripe set选项是当已有容器使用完之后,再使用新的容器,与(2)不同,不会做rebalance

 

*将已有的DMS表空间转换为自动存储管理表空间,有两种方法:(须先确保数据库已经启动了自动存储管理)

1.更改表空间。这种方法保持表空间持续可用。

Db2 “create tablespace ts1 managed by database using (file ‘/data1/ts1/cont0’ 10M)”

Db2 “alter tablespace ts1 managed by automatic storage”

Db2 alter tablespace ts1 rebalance

 

2.采用重定向恢复,正在恢复的表空间不允许访问。

Db2 restore database sample tablespace tbs1 redirect

Db2 set tablespace containers for tablespace_id using automatic storage

Db2 restore database sample continue

Db2 rollforward database sample to end of logs and stop

表空间的状态

1. Quiesced :可通过该命令锁定表空间,防止其他用户操作。

2. Db2 quiesce tablespaces for table db2inst1.t1 share

3. Db2 quiesce tablespaces for table db2inst1.t1 reset

4. Drop pending :重启数据库时,如果一个或者多个容器出现问题,那么该容器就处于这个状态,表空间不可用。

5. Offline and not accessible :表空间容器出现异常时,可能会处于这种状态。

表空间高水位(HWM)

I. HWM 会对表空间管理产生较大影响的几种情况:

1.通过alter tablespace reduce/resize/drop 选项对表空间进行更改时,如果更改后的页数小于HWM的值,失败。

2.备份时,DB2会复制每个表空间HWM一下的所有块,在进行表空间重定向回复时,如果重新设定的容器大小小于HWM,即使空闲块很多,恢复也无法进行。

3.表空间满了,删除了很多数据,却发现HWM仍然很高。

II. 降低HWM的方法

 

存储规划设计最佳实践

1.存储层RAID 0RAID 1RAID 5RAID 10 等。

i. RAID 0 :提供最好的性能,不提供任何冗余,实际生产用的少。

ii. RAID 1 :性能好,每块磁盘都需要镜像,适用于交易系统(OLTP)。

iii. RAID 5 :奇偶校验,成本相对较低,写入速度相对单个磁盘稍慢,适用数据仓库(OLAP)或交易系统。

iv. RAID 10 RAID 1+0,特别适用既有大量数据存取,又对数据安全要求比较高的场景,成本高,适用于交易系统。

2.确定了RAID级别之后,需要规划存储容量和RAID组磁盘个数。磁盘越多,并发I/O性能越好。

 

 

 

*最佳实践总结:

存储规划时,优先考虑磁盘个数而不是容量,让数据尽可能跨多块盘。

最多做两层条带。存储层通过RAID条带,系统层通过卷管理器,DB2层通过表空间容器。建议在存储层和数据库层条带。

在磁盘个数有限的情况下,建议将数据和存储跨越所有物理存储,而非单独存储,从而提高并发性能。从维护角度,建表时仍建议为数据、索引、大对象建立独立的表空间。

使用RAID阵列时,将Extent Size设置为RAID的大小,可以提高写性能;Prefetch Size参数使用默认的Automatic值。

表空间的选择,V9开始,系统表空间默认DMS;临时表空间推荐SMS;大对象不能通过bufferpool缓存,可采用SMSDMS,利用文件系统的缓存机制提升性能;存放数据的表空间建议使用DMS;对于小型数据库建议使用自动存储管理。

对于DMS容器类型,建议选择文件系统而非裸设备。

创建DMS表空间时,如果是普通数据,可指定no file system caching避免文件系统缓存。如果是大对象数据,可考虑using file system caching,充分利用文件缓存提升性能。


0 0
原创粉丝点击