上午剛剛上班,突然被拉到一個客戶群里,咨詢DB2數(shù)據(jù)庫怎么關(guān)閉表空間自動增長,看到這個問題,我想簡單啊,和oracle一樣,一條命令就行了,然后我就把這個命令發(fā)給客戶了,過了一個客戶說執(zhí)行成功了,但是增加表空間大小還是不行,我就想到了DB2數(shù)據(jù)庫空間的特殊性,根據(jù)不通類型的表空間增加表空間大小的方式也不一樣,下面請跟著我的步伐一起了解下DB2表空間的類型,及如何維護管理。
DB2表空間簡介:
管理方式:SMS,DMS,自動存儲管理
存儲類型:系統(tǒng)表空間,數(shù)據(jù)表空間,系統(tǒng)臨時表空間,用戶臨時表空間。
DB2數(shù)據(jù)庫在建庫的時候會自動創(chuàng)建三個表空間
系統(tǒng)表空間(system tablespace),用來存儲系統(tǒng)表,也就是數(shù)據(jù)字典的信息,一個數(shù)據(jù)庫只能有一個系統(tǒng)表空間;
臨時表空間(temporarytablespace),用來保存語句執(zhí)行時產(chǎn)生的中間臨時數(shù)據(jù),如join,排序等操作都可能產(chǎn)生一些臨時數(shù)據(jù);
用戶表空間(user tablespace),用來存儲表,索引,大對象等數(shù)據(jù);
下面我們就詳細的看看怎么對DB2的表空間進行管理。
創(chuàng)建表空間
在創(chuàng)建表空間前,還需要創(chuàng)建一個緩沖池
db2"CREATE BUFFERPOOL BP32K SIZE 10000 PAGESIZE 32K"
問:什么是緩沖池呢?
答:緩沖池(),Bufferpool是數(shù)據(jù)庫最重要的內(nèi)存區(qū),用來緩存數(shù)據(jù),提高性能。創(chuàng)建緩沖池時,size表示頁數(shù),pagesize表示大小,size*pagesize就是緩沖池的內(nèi)存大小。
在建庫的時候,DB2會自動創(chuàng)建一個名為IBMDEFAULEBP的緩沖池,如果在建庫時候沒有指定pagesize那么IBMDEFAULEBP的默認pagesize是4K。
每個表空間都有一個Bufferpool與之對應(yīng),多個表空間可以共享一個Bufferpool,但要求Bufferpool的pagesize大小必須與表空間的pagesize匹配,否則無法創(chuàng)建。緩沖池創(chuàng)建完成過后,再繼續(xù)創(chuàng)建表空間。
創(chuàng)建DMS管理的數(shù)據(jù)表空間
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負責(zé),即DMS(database-managedspace),Using指定表空間的容器,DMS支持的容器類型是文件(file)和裸設(shè)備(rawdevice)。
DMS類型的表空間在創(chuàng)建時即分配空間,創(chuàng)建后可通過命令對表空間容器進行增刪改。對于數(shù)據(jù)來說,建議用DMS管理。
NOFILE SYSTEM CACHING 該選項的目的是關(guān)閉文件系統(tǒng)緩存原因是DB2使用Bufferpool緩存數(shù)據(jù),為了減小額外的開銷,不必使用文件緩存,這個選項是DB29.5 版本的默認選項。
注意:大對象()數(shù)據(jù)的獲取直接通過磁盤,無法通過Bufferpool緩存,因為可以考慮將大對象創(chuàng)建在獨立的表空間上,并使用filesystem caching 選項。
創(chuàng)建SMS管理的臨時表空間
db2"CREATE TEMPORARY TABLESPACE tbs_temp PAGESIZE 32K MANAGEDBY SYSTEM USING(/data1/data/tbs_temp) BUFFERPOOL BP32K"
系統(tǒng)臨時表空間用來存儲DB2產(chǎn)生的一些臨時數(shù)據(jù)。
MANAGEDBY SYSTEM表示空間的分配和管理由操作系統(tǒng)負責(zé),即SMS(system-managedspace)Using指定表空間的容器,
SMS支持的容器類型只能是目錄,無需指定大小,只要路徑所屬的文件系統(tǒng)有空間,就可以被表空間使用。
SMS的優(yōu)點是比較容易管理,缺點是性能比DMS差一些,大概差5%~10%左右,對于臨時表空間來說,建議使用SMS管理。
創(chuàng)建SMS管理的用戶臨時表空間
db2"CREATE USER TEMPORARY TABLESPACE tbs_user_temp PAGESIZE 32KMANAGED BY SYSTEM USING (/data1/data/tbs_usertemp) BUFFERPOOLBP32K"
與系統(tǒng)表空間類似,用戶臨時表空間也用保存臨時數(shù)據(jù),但他存儲的是用戶自定義的臨時表,對于用戶臨時表空間來說,建議使用SMS管理。
創(chuàng)建自動存儲管理(Automatic Storage)的表空間
創(chuàng)建數(shù)據(jù)頁為32kb的自動存儲管理表空間
createtablespace tbs_index pagesize 32k bufferpool bp32k
創(chuàng)建初始大小為100MB,增量為100MB,最大大小為100GB的自動存儲管理表空間
createtablespace tbs_data2 initialsize 100M increasesize 100M maxsize 100G
上面這種直接創(chuàng)建的自動存儲的表空間,他的容器路徑在哪里呢,我們查看下
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情況下,會使用系統(tǒng)默認的自動存儲空間,如果在創(chuàng)建數(shù)據(jù)庫的時候沒有指定自動存儲的路徑,默認路徑就會在實例用戶的文件下。
那該如何把自動存儲的表空間放在規(guī)劃好的空間呢
需要我們先創(chuàng)建一個STOGROUP
db2"CREATE STOGROUP sg ON /data1/path1, /data1/path2 " |
在添加表空間的時候指定對應(yīng)的組就行了
db2"create tablespace tbstest managed by automatic storage USINGSTOGROUP sg"
注意:以上兩個命令在V9.7版本中是不存在的
修改表空間
上面扯了一堆,把DB2的表空間類型和創(chuàng)建方式講了一下,然后我們回到最開始的問題,客戶的問題,如何關(guān)閉表空間自動增長的問題,看著這個問題,直接一條命令發(fā)給了客戶,客戶執(zhí)行后說沒有關(guān)閉啊,我擴展表空間還是擴展不了啊。
db2"alter tablespace tablespacename autoresize no"
通過上面的命令就可以把表空間的自動增長關(guān)了,但是客戶說沒起效果,就讓客戶查了下表殼空間的信息。
通過查看發(fā)現(xiàn)對應(yīng)表空間的自增長已經(jīng)是NO了啊,然后就看到這個表空間的AS類型是自動存儲的表空間。然后客戶通過非自動存儲表空間擴展的方式來的增加表空間大小的,這肯定不對啊。那下面我們就詳細說下DMS管理的表空間在自動存儲和非自動存儲下怎么擴展表空間。
自動存儲表空間
DB2是個很有意思的數(shù)據(jù)庫,不同版本之間一些函數(shù),命令等會有差異。在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"
找到對應(yīng)表空間所在存儲組,然后對該組進行空間添加。
非自動存儲表空間
非自動擴展的表空間,在擴展的時候需要添加容器或者擴展容器,容器類型也分為文件和裸設(shè)備兩種:
DMS+文件
如果表空間容器已經(jīng)沒有剩余空間,可通過add選項增加容器,當(dāng)然必要的情況下也可以通過drop選項刪除容器。對于add和drop操作會在容器間發(fā)生數(shù)據(jù)重新平衡(rebalance)。如果數(shù)據(jù)量很大,rebalance時間有可能很久,對系統(tǒng)可能造成很大影響。
altertablespace tbs_data add(file /database/tbs_data/cont2 100m)
如果使用beginnew strip set選項則會在現(xiàn)有容器空間用完時使用新增容器,該選項使數(shù)據(jù)不會在容器間做rebalance,但會造成數(shù)據(jù)偏移。
altertablespace tbs_data begin new stripe set (file/database/tbs_data/cont3 100m)
擴展:
如果DMS表空間對應(yīng)的存儲中還有未分配空間,可通過altertablespace的extend、reduce或resize選項擴展已有表空間容器的大小。其中extend用來擴展容器大小,reduce用來縮減已有容器大小,resize重新設(shè)定容器大小。對于reduce和resize,需確保更改后的表空間有足夠空間,否則DB2拒絕操作。
altertablespace tbs_data extend (file /database/tbs_data/cont0 10M)
DMS+裸設(shè)備
新增
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表空間在運維過程中總結(jié)的一些經(jīng)驗,希望可以幫助到大家,如有疑問歡迎一起討論。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/130068.html
摘要:下面基于,帶著大家看一下中如何配置多數(shù)據(jù)源。注意版本不一致導(dǎo)致的一些小問題。配置配置兩個數(shù)據(jù)源數(shù)據(jù)庫和數(shù)據(jù)庫注意事項在配置數(shù)據(jù)源的過程中主要是寫成和。五啟動類此注解表示啟動類這樣基于的多數(shù)據(jù)源配置就已經(jīng)完成了,兩個數(shù)據(jù)庫都可以被訪問了。 在上一篇文章《優(yōu)雅整合 SpringBoot+Mybatis ,可能是你見過最詳細的一篇》中,帶著大家整合了 SpringBoot 和 Mybatis...
摘要:新晉技術(shù)專家下面是墨天輪部分新晉的技術(shù)專家。大家可以點擊往期閱讀墨天輪技術(shù)專家邀請函了解詳情,申請成為我們的技術(shù)專家,加入專家團隊,與我們一起創(chuàng)建一個開放互助的數(shù)據(jù)庫技術(shù)社區(qū)。新關(guān)聯(lián)公眾號墨天輪是一個開放互助的數(shù)據(jù)庫技術(shù)社區(qū)。 引言 近期我們在DBASK小程序增加了數(shù)據(jù)庫 MongoDB、Redis、 Elasticsearch、DB2、Weblogic 等新的的專題欄目和一些新的技術(shù)...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20