资讯专栏INFORMATION COLUMN

DB2 数据库表空间管理

IT那活儿 / 1888人阅读
DB2 数据库表空间管理

上午刚刚上班,突然被拉到一个客户群里,咨询DB2数据库怎么关闭表空间自动增长,看到这个问题,我想简单啊,和oracle一样,一条命令就行了,然后我就把这个命令发给客户了,过了一个客户说执行成功了,但是增加表空间大小还是不行,我就想到了DB2数据库空间的特殊性,根据不通类型的表空间增加表空间大小的方式也不一样,下面请跟着我的步伐一起了解下DB2表空间的类型,及如何维护管理。


DB2表空间简介:


管理方式:SMS,DMS,自动存储管理


存储类型:系统表空间,数据表空间,系统临时表空间,用户临时表空间。


DB2数据库在建库的时候会自动创建三个表空间


系统表空间(system   tablespace),用来存储系统表,也就是数据字典的信息,一个数据库只能有一个系统表空间;


临时表空间(temporarytablespace),用来保存语句执行时产生的中间临时数据,如join,排序等操作都可能产生一些临时数据;


用户表空间(user     tablespace),用来存储表,索引,大对象等数据;


下面我们就详细的看看怎么对DB2的表空间进行管理。


创建表空间


在创建表空间前,还需要创建一个缓冲池

db2"CREATE BUFFERPOOL BP32K SIZE 10000 PAGESIZE 32K"


问:什么是缓冲池呢?

答:缓冲池(),Bufferpool是数据库最重要的内存区,用来缓存数据,提高性能。创建缓冲池时,size表示页数,pagesize表示大小,size*pagesize就是缓冲池的内存大小。

在建库的时候,DB2会自动创建一个名为IBMDEFAULEBP的缓冲池,如果在建库时候没有指定pagesize那么IBMDEFAULEBP的默认pagesize是4K。


每个表空间都有一个Bufferpool与之对应,多个表空间可以共享一个Bufferpool,但要求Bufferpool的pagesize大小必须与表空间的pagesize匹配,否则无法创建。缓冲池创建完成过后,再继续创建表空间。


创建DMS管理的数据表空间

db2 "CREATE LARGE TABLESPACE tbs_data  PAGESIZE 32K MANAGED BY DATABASE USING (FILE /data1/data/cont0 5M,FILE /data1/data/cont1 5M) 

EXTENTSIZE 32 PREFETCHSIZE automatic BUFFERPOOL BP32K NO FILE SYSTEM CACHING"


MANAGEDBY DATABASE表示表空间的分配和管理由DB2负责,即DMS(database-managedspace),Using指定表空间的容器,DMS支持的容器类型是文件(file)和裸设备(rawdevice)。


DMS类型的表空间在创建时即分配空间,创建后可通过命令对表空间容器进行增删改。对于数据来说,建议用DMS管理。

NOFILE SYSTEM CACHING 该选项的目的是关闭文件系统缓存原因是DB2使用Bufferpool缓存数据,为了减小额外的开销,不必使用文件缓存,这个选项是DB29.5 版本的默认选项。


注意:大对象()数据的获取直接通过磁盘,无法通过Bufferpool缓存,因为可以考虑将大对象创建在独立的表空间上,并使用filesystem caching 选项。


创建SMS管理的临时表空间


db2"CREATE TEMPORARY TABLESPACE tbs_temp PAGESIZE 32K MANAGEDBY SYSTEM USING(/data1/data/tbs_temp) BUFFERPOOL BP32K"

系统临时表空间用来存储DB2产生的一些临时数据。

MANAGEDBY SYSTEM表示空间的分配和管理由操作系统负责,即SMS(system-managedspace)Using指定表空间的容器,


SMS支持的容器类型只能是目录,无需指定大小,只要路径所属的文件系统有空间,就可以被表空间使用。


SMS的优点是比较容易管理,缺点是性能比DMS差一些,大概差5%~10%左右,对于临时表空间来说,建议使用SMS管理。


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

db2"CREATE USER TEMPORARY TABLESPACE tbs_user_temp PAGESIZE 32KMANAGED BY SYSTEM USING (/data1/data/tbs_usertemp) BUFFERPOOLBP32K"


与系统表空间类似,用户临时表空间也用保存临时数据,但他存储的是用户自定义的临时表,对于用户临时表空间来说,建议使用SMS管理。


创建自动存储管理(Automatic Storage)的表空间


创建数据页为32kb的自动存储管理表空间

createtablespace tbs_index pagesize 32k bufferpool bp32k



创建初始大小为100MB,增量为100MB,最大大小为100GB的自动存储管理表空间

createtablespace tbs_data2 initialsize 100M increasesize 100M maxsize 100G



上面这种直接创建的自动存储的表空间,他的容器路径在哪里呢,我们查看下

db2"SELECT substr(TBSP_NAME,1,30) as  TBSP_NAME,STORAGE_GROUP_NAME FROM table (MON_GET_TABLESPACE(, -2))"


db2"SELECT VARCHAR(STORAGE_GROUP_NAME, 30) AS STOGROUP,STORAGE_GROUP_ID, VARCHAR(DB_STORAGE_PATH, 40) AS STORAGE_PATH FROMTABLE(ADMIN_GET_STORAGE_PATHS(,-1)) AS T"


可以看出不指定自动存储的group情况下,会使用系统默认的自动存储空间,如果在创建数据库的时候没有指定自动存储的路径,默认路径就会在实例用户的文件下。


那该如何把自动存储的表空间放在规划好的空间呢

需要我们先创建一个STOGROUP


db2"CREATE STOGROUP sg ON  /data1/path1, /data1/path2 "



在添加表空间的时候指定对应的组就行了

db2"create tablespace tbstest managed by automatic storage USINGSTOGROUP sg"


注意:以上两个命令在V9.7版本中是不存在的


修改表空间

上面扯了一堆,把DB2的表空间类型和创建方式讲了一下,然后我们回到最开始的问题,客户的问题,如何关闭表空间自动增长的问题,看着这个问题,直接一条命令发给了客户,客户执行后说没有关闭啊,我扩展表空间还是扩展不了啊。

db2"alter tablespace tablespacename  autoresize no"


通过上面的命令就可以把表空间的自动增长关了,但是客户说没起效果,就让客户查了下表壳空间的信息。


通过查看发现对应表空间的自增长已经是NO了啊,然后就看到这个表空间的AS类型是自动存储的表空间。然后客户通过非自动存储表空间扩展的方式来的增加表空间大小的,这肯定不对啊。那下面我们就详细说下DMS管理的表空间在自动存储和非自动存储下怎么扩展表空间。


自动存储表空间


DB2是个很有意思的数据库,不同版本之间一些函数,命令等会有差异。在V9.7版本中自动存储的表空间通过以下命令来扩展。


db2 "alter database sample  add storage on /home/db2inst1/test"

db2 "alter tablespace USERSPACE1 rebalance"


扩展好自动存储路径后,通过对表空间进行重新平衡,使表空间使用新的路径,在V10以上的版本中,通过一下命令扩展。


db2"alter STOGROUP sg add /data1/path2"

找到对应表空间所在存储组,然后对该组进行空间添加。


非自动存储表空间

非自动扩展的表空间,在扩展的时候需要添加容器或者扩展容器,容器类型也分为文件和裸设备两种:


DMS+文件

如果表空间容器已经没有剩余空间,可通过add选项增加容器,当然必要的情况下也可以通过drop选项删除容器。对于add和drop操作会在容器间发生数据重新平衡(rebalance)。如果数据量很大,rebalance时间有可能很久,对系统可能造成很大影响。


altertablespace tbs_data add(file /database/tbs_data/cont2 100m) 


如果使用beginnew strip set选项则会在现有容器空间用完时使用新增容器,该选项使数据不会在容器间做rebalance,但会造成数据偏移。

altertablespace tbs_data begin new stripe set (file/database/tbs_data/cont3 100m)


扩展:


如果DMS表空间对应的存储中还有未分配空间,可通过altertablespace的extend、reduce或resize选项扩展已有表空间容器的大小。其中extend用来扩展容器大小,reduce用来缩减已有容器大小,resize重新设定容器大小。对于reduce和resize,需确保更改后的表空间有足够空间,否则DB2拒绝操作。

altertablespace tbs_data extend (file /database/tbs_data/cont0 10M)


DMS+裸设备


新增

db2 "alter tablespace tbs_data  ADD ( Device /dev/rlv_8g_308 8190M ) "

db2 "alter tablespace TBS_DATA begin new stripe set ( Device /dev/rlv_8g_108 8190M)"

扩展

db2"alter tablespace tbs_data  extend ( Device /dev/rlv_8g_3088190M )"


以上就是我对DB2表空间在运维过程中总结的一些经验,希望可以帮助到大家,如有疑问欢迎一起讨论。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130068.html

相关文章

  • 新手也能实现,基于SpirngBoot2.0+ 的 SpringBoot+Mybatis 多数据源配

    摘要:下面基于,带着大家看一下中如何配置多数据源。注意版本不一致导致的一些小问题。配置配置两个数据源数据库和数据库注意事项在配置数据源的过程中主要是写成和。五启动类此注解表示启动类这样基于的多数据源配置就已经完成了,两个数据库都可以被访问了。 在上一篇文章《优雅整合 SpringBoot+Mybatis ,可能是你见过最详细的一篇》中,带着大家整合了 SpringBoot 和 Mybatis...

    shiina 评论0 收藏0
  • DBASK问答集萃(2)

    摘要:新晋技术专家下面是墨天轮部分新晋的技术专家。大家可以点击往期阅读墨天轮技术专家邀请函了解详情,申请成为我们的技术专家,加入专家团队,与我们一起创建一个开放互助的数据库技术社区。新关联公众号墨天轮是一个开放互助的数据库技术社区。 引言 近期我们在DBASK小程序增加了数据库 MongoDB、Redis、 Elasticsearch、DB2、Weblogic 等新的的专题栏目和一些新的技术...

    liuchengxu 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<