DB2使用resize命令擴(kuò)容表空間引起rebalance問題的分析
問題描述:
最近一次表空間擴(kuò)容,環(huán)境是DB2 10.1FP4,Suse 11.3,文件系統(tǒng)使用的是Symantec StorageFoundation,有個(gè)表空間共32個(gè)容器,每個(gè)容器大小都是20G,打算擴(kuò)容這個(gè)表空間,于是使用了resize (all 24G)的命令,db2 "alter tablespace tbs resize (all 24G)",執(zhí)行完成后發(fā)現(xiàn) tbs開始rebalance了,這個(gè)有點(diǎn)奇怪,我是在現(xiàn)有的container增加空間,不會(huì)影響表空間的HWM,為什么會(huì)觸發(fā)rebalance呢?
問題分析:
查看表空間的snapshot,發(fā)現(xiàn)這個(gè)表空間的映射有點(diǎn)奇怪(這個(gè)是rebalance完成后的),container大小都是一樣,為什么映射是這樣的?
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 163835 5242751 0 40958 0 4 (0,1,2,3)
[ 1] [ 0] 0 237563 7602047 40959 49150 0 9 (0,1,2,3,4,5,6,7,8)
[ 2] [ 0] 0 401398 12844767 49151 81917 0 5 (4,5,6,7,8)
[ 3] [ 0] 0 499702 15990495 81918 90109 0 12 (4,5,6,7,8,9,10,11,12,13,14,15)
[ 4] [ 0] 0 600054 19201759 90110 104445 0 7 (9,10,11,12,13,14,15)
[ 5] [ 0] 0 1212383 38796287 104446 131068 0 23 (9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31)
[ 6] [ 0] 0 1572831 50330623 131069 153596 0 16 (16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31)
查了信息中心,有一些關(guān)于tablespace map的說明,但沒有很確切說明問什么會(huì)引起rebalance,我堅(jiān)信本次問題是和表空間分布有關(guān),于是做了一些表空間擴(kuò)容的測(cè)試,最終重現(xiàn)了該現(xiàn)象。
實(shí)驗(yàn)測(cè)試:
===測(cè)試1:增加數(shù)據(jù)庫文件,新增數(shù)據(jù)文件大于原有的數(shù)據(jù)文件===
最初表空間分布
db2 get snapshot for tablespaces on sampledb >> ts1.out
Table space map:
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 77 2495 0 38 0 2 (0,1)
執(zhí)行
db2 "alter tablespace USERSP4 add (file '/db2data/db2inst1/sampledb/data/usersp4_c03' 20M, file '/db2data/db2inst1/sampledb/data/usersp4_c04' 20M)"
查看表空間分布
db2 get snapshot for tablespaces on sampledb >> ts2.out
Table space map:
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 155 4991 0 38 0 4 (0,1,2,3)
[ 1] [ 0] 0 235 7551 39 78 0 2 (2,3)
執(zhí)行
db2 "alter tablespace USERSP4 resize (all 20M)"
查看表空間分布
db2 get snapshot for tablespaces on sampledb >> ts3.out
Table space map:
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 315 10111 0 78 0 4 (0,1,2,3)
自動(dòng)降表空間分布規(guī)整了。
===測(cè)試2:增加數(shù)據(jù)庫文件,新增數(shù)據(jù)文件小于原有的數(shù)據(jù)文件===
最初表空間分布
db2 get snapshot for tablespaces on sampledb >> ts1.out
Table space map:
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 77 2495 0 38 0 2 (0,1)
執(zhí)行
db2 "alter tablespace USERSP4 add (file '/db2data/db2inst1/sampledb/data/usersp4_c03' 5M, file '/db2data/db2inst1/sampledb/data/usersp4_c04' 5M)"
查看表空間分布
db2 get snapshot for tablespaces on sampledb >> ts4.out
Table space map:
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 39 1279 0 19 0 2 (0,1)
[ 1] [ 0] 0 115 3711 20 38 0 4 (0,1,2,3)
執(zhí)行
db2 "alter tablespace USERSP4 resize (all 10M)"
查看表空間分布
db2 get snapshot for tablespaces on sampledb >> ts5.out
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 39 1279 0 19 0 2 (0,1)
[ 1] [ 0] 0 115 3711 20 38 0 4 (0,1,2,3)
[ 2] [ 0] 0 155 4991 39 58 0 2 (2,3)
resize all命令執(zhí)行后,表空間分布沒有自動(dòng)規(guī)整好??!
db2 "alter tablespace USERSP4 resize (all 20M)"
db2 get snapshot for tablespaces on sampledb >> ts6.out
Table space map:
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 39 1279 0 19 0 2 (0,1)
[ 1] [ 0] 0 275 8831 20 78 0 4 (0,1,2,3)
[ 2] [ 0] 0 315 10111 79 98 0 2 (2,3)
再次執(zhí)行resize (all 20M)進(jìn)行表空間擴(kuò)容,表空間分布還是沒有自動(dòng)規(guī)整!
db2 "alter tablespace USERSP4 resize (all 30M)"
db2 get snapshot for tablespaces on sampledb >> ts7.out
Table space map:
Range Stripe Stripe Max Max Start End Adj. Containers
Number Set Offset Extent Page Stripe Stripe
[ 0] [ 0] 0 39 1279 0 19 0 2 (0,1)
[ 1] [ 0] 0 435 13951 20 118 0 4 (0,1,2,3)
[ 2] [ 0] 0 475 15231 119 138 0 2 (2,3)
再次執(zhí)行resize (all 30M)進(jìn)行表空間擴(kuò)容,表空間分布還是沒有自動(dòng)規(guī)整!
如果執(zhí)行完resize (all 20M)后,表空間使用率很高了,比如使用到了第三個(gè)Stripe,即276號(hào)extent以后的空間,再執(zhí)行resize (all 30M)后,276號(hào)開始的extent會(huì)觸發(fā)rebalance
結(jié)論:通過以上測(cè)試可以看到DB2在增加新的數(shù)據(jù)文件的時(shí)候,如果新增數(shù)據(jù)文件大于原來的數(shù)據(jù)文件,使用resize命令可以自動(dòng)規(guī)整表空間分布;如果新增數(shù)據(jù)文件小于原來的數(shù)據(jù)文件,使用resize命令無法自動(dòng)規(guī)整表空間分布,導(dǎo)致數(shù)據(jù)分布不整齊,可能在擴(kuò)容期間會(huì)引起表空間rebalance。建議DB2每次增加數(shù)據(jù)文件,與原來的數(shù)據(jù)文件大小一致,或者至少比原來的數(shù)據(jù)文件大。
還有一個(gè)疑問:如果出現(xiàn)了這種數(shù)據(jù)文件不對(duì)齊的現(xiàn)象,如何才能讓數(shù)據(jù)文件變?yōu)橐?guī)整?