在 DMS 表空間中如何添加和擴(kuò)展容器
創(chuàng)建表空間時(shí),會(huì)創(chuàng)建其表空間映射并對(duì)齊所有初始容器,以使它們都從分割區(qū) 0 開(kāi)始。這意味著數(shù)據(jù)將均勻分布在所有表空間容器上,直到個(gè)別容器已滿。(請(qǐng)參閱示例 1。)
ALTER TABLESPACE 語(yǔ)句允許向現(xiàn)有表空間添加容器或擴(kuò)展容器,以增加其存儲(chǔ)容量。
添加比現(xiàn)有容器小的容器會(huì)導(dǎo)致數(shù)據(jù)分布不均勻。這可能導(dǎo)致并行 I/O 操作(如預(yù)取數(shù)據(jù))的執(zhí)行效率比對(duì)大小相同的容器執(zhí)行的效率要低。
向表空間添加新容器或擴(kuò)展現(xiàn)有容器時(shí),可能發(fā)生表空間數(shù)據(jù)的重新平衡。
重新平衡
添加或擴(kuò)展容器時(shí)的在平衡過(guò)程涉及將表空間擴(kuò)展數(shù)據(jù)塊從一個(gè)位置移動(dòng)到另一位置,這是通過(guò)試圖保持?jǐn)?shù)據(jù)在表空間內(nèi)成為分割區(qū)來(lái)完成的。
在重新平衡期間不會(huì)限制對(duì)表空間的訪問(wèn);可以像平常一樣刪除、創(chuàng)建、填充和查詢對(duì)象。但是,重新平衡操作可能對(duì)性能有很大的影響。如果需要添加多個(gè)容器,并且計(jì)劃重新平衡容器,則應(yīng)在單個(gè) ALTER TABLESPACE 語(yǔ)句中同時(shí)添加它們,以免數(shù)據(jù)庫(kù)管理器不得不多次重新平衡數(shù)據(jù)。
表空間高水位標(biāo)記在重新平衡過(guò)程中起著關(guān)鍵作用。高水位標(biāo)記是表空間中分配的最高頁(yè)的頁(yè)數(shù)。例如,表空間有 1000 頁(yè),擴(kuò)展數(shù)據(jù)塊大小為 10,則結(jié)果為 100 個(gè)擴(kuò)展數(shù)據(jù)塊。如果第 42 個(gè)擴(kuò)展數(shù)據(jù)塊是表空間中最高分配的擴(kuò)展數(shù)據(jù)塊,則高水位標(biāo)記是 42 * 10 = 420 頁(yè)。這與已使用的頁(yè)不同,因?yàn)榭赡芤呀?jīng)釋放了高水位標(biāo)記下的一些擴(kuò)展數(shù)據(jù)塊,所以它們可供復(fù)用。
在重新平衡啟動(dòng)之前,會(huì)根據(jù)所作的容器更改構(gòu)建新的表空間映射。重新平衡程序?qū)U(kuò)展數(shù)據(jù)塊從由當(dāng)前映射確定的位置移至由新映射確定的位置。重新平衡程序從擴(kuò)展數(shù)據(jù)塊 0 開(kāi)始,一次移動(dòng)一個(gè)擴(kuò)展數(shù)據(jù)塊,直到移動(dòng)了持有高水位標(biāo)記的擴(kuò)展數(shù)據(jù)塊為止。移動(dòng)每個(gè)擴(kuò)展數(shù)據(jù)塊時(shí),當(dāng)前映射每次改變一塊以使其看起來(lái)與新映射相似。當(dāng)完成重新平衡時(shí),對(duì)于當(dāng)前映射和新映射,一直到持有高水位標(biāo)記的分割區(qū),看起來(lái)應(yīng)完全相同。于是使當(dāng)前映射與新映射看起來(lái)完全相同,重新平衡過(guò)程就完成了。如果擴(kuò)展數(shù)據(jù)塊在當(dāng)前映射中的位置與它在新映射中的位置相同,則不移動(dòng)該擴(kuò)展數(shù)據(jù)塊,并且不發(fā)生 I/O。
當(dāng)添加新容器時(shí),該容器在新映射內(nèi)的位置取決于其大小及其分割集中其他容器的大小。若容器足夠大,以至于它可以從分割集中的第一個(gè)分割區(qū)開(kāi)始,并在分割集中的最后一個(gè)分割區(qū)處(或以外)結(jié)束,則將它使用該方法放置(請(qǐng)參閱示例 2)。若容器不夠大,無(wú)法做到這一點(diǎn),則它將在映射中定位為在分割集的最后一個(gè)分割區(qū)結(jié)束(請(qǐng)參閱示例 4。)這樣做是為了最小化需要重新平衡的數(shù)據(jù)量。
注:
在下列示例中,容器大小未將容器標(biāo)記計(jì)算在內(nèi)。容器大小很小,僅用于說(shuō)明目的,它們不是建議的容器大小。這些示例顯示表空間中不同大小的容器,但建議使用相同大小的容器。
示例 1:
如果您創(chuàng)建的表空間有三個(gè)容器,擴(kuò)展數(shù)據(jù)塊大小為 10,并且容器分別為 60、40 和 80 頁(yè)(6、4 和 8 個(gè)擴(kuò)展數(shù)據(jù)塊),則將創(chuàng)建帶有映射的表空間,可進(jìn)行如圖 88 中所示的圖解。
圖 88. 帶有三個(gè)容器和 18 個(gè)擴(kuò)展數(shù)據(jù)塊的表空間
相應(yīng)的表空間映射,如表空間快照中所示,類似如下:
范圍 分割集 分割區(qū) 最大 最大 起始 結(jié)束 調(diào)節(jié) 容器
編號(hào) 偏移 擴(kuò)展數(shù)據(jù)塊 頁(yè) 分割區(qū) 分割區(qū)
[0] [0] 0 11 119 0 3 0 3(1 和 2)
[1] [0] 0 15 159 4 5 0 2(0 和 2)
[2] [0] 0 17 179 6 7 0 1(2)
|
表空間映射中的標(biāo)題是“范圍編號(hào)”、“分割集”、“分割區(qū)偏移”、“根據(jù)范圍尋址的最大擴(kuò)展數(shù)據(jù)塊編號(hào)”、“根據(jù)范圍尋址的最大頁(yè)編號(hào)”、“起始分割區(qū)”、“結(jié)束分割區(qū)”、“范圍調(diào)節(jié)”和“容器列表”。
示例 2:
如果在示例 1 中向表空間添加了一個(gè) 80 頁(yè)的容器,容器就大到足以從第一個(gè)分割區(qū)(分割區(qū) 0)中開(kāi)始,并在最后一個(gè)分割區(qū)(分割區(qū) 7)中結(jié)束。它被定位為從第一個(gè)分割區(qū)中開(kāi)始。結(jié)果表空間可進(jìn)行如圖 89 中所示的圖解。
圖 89. 帶有四個(gè)容器和 26 個(gè)擴(kuò)展數(shù)據(jù)塊的表空間
相應(yīng)的表空間映射,如表空間快照中所示,類似如下:
范圍 分割集 分割區(qū) 最大 最大 起始 結(jié)束 調(diào)節(jié) 容器
編號(hào) 偏移 擴(kuò)展數(shù)據(jù)塊 頁(yè) 分割區(qū) 分割區(qū)
[0] [0] 0 15 159 0 3 0 4(0、1、2 和 3)
[1] [0] 0 21 219 4 5 0 3(0、2 和 3)
[2] [0] 0 25 259 6 7 0 2(2 和 3)
|
如果高水位標(biāo)記在擴(kuò)展數(shù)據(jù)塊 14 以內(nèi),則重新平衡程序?qū)臄U(kuò)展數(shù)據(jù)塊 0 開(kāi)始,并且將把所有擴(kuò)展數(shù)據(jù)塊上移至 14(包括 14)。兩個(gè)映射內(nèi)的擴(kuò)展數(shù)據(jù)塊 0 的位置相同,所以不必移動(dòng)此擴(kuò)展數(shù)據(jù)塊。擴(kuò)展數(shù)據(jù)塊 1 和 2 的情況相同。需要移動(dòng)擴(kuò)展數(shù)據(jù)塊 3,所以從舊位置(容器 0 內(nèi)的第二個(gè)擴(kuò)展數(shù)據(jù)塊)讀取該擴(kuò)展數(shù)據(jù)塊并寫至新位置(容器 3 內(nèi)的第一個(gè)擴(kuò)展數(shù)據(jù)塊)。將移動(dòng)此擴(kuò)展數(shù)據(jù)塊之后直到擴(kuò)展數(shù)據(jù)塊 14(包括擴(kuò)展數(shù)據(jù)塊 14)的每個(gè)擴(kuò)展數(shù)據(jù)塊。一旦移動(dòng)了擴(kuò)展數(shù)據(jù)塊 14,當(dāng)前映射看起來(lái)會(huì)像新映射,并且重新平衡程序?qū)⒔K止。
如果改變映射以使所有新添加的空間都在上限之后,則不需要重新平衡并且所有的空間都立即可用。如果改變映射以使部分空間在高水位標(biāo)記之后,則分割區(qū)中在高水位標(biāo)記之上的空間將是可用的。余下部分直到重新平衡完成才可用。
如果決定擴(kuò)展容器,則重新平衡程序的功能相似。如果擴(kuò)展容器以使它超出了分割集中的最后一個(gè)分割,則將擴(kuò)展該分割集以適應(yīng)這種情況并將相應(yīng)地移出其后的分割集。結(jié)果是容器不會(huì)擴(kuò)展到其后的任何分割集中。
示例 3:
以“示例 1”中的表空間為例。如果將容器 1 從 40 頁(yè)擴(kuò)展到 80 頁(yè),則新表空間將類似圖 90。
圖 90. 帶有三個(gè)容器和 22 個(gè)擴(kuò)展數(shù)據(jù)塊的表空間
相應(yīng)的表空間映射,如表空間快照中所示,類似如下:
范圍 分割集 分割區(qū) 最大 最大 起始 結(jié)束 調(diào)節(jié) 容器
編號(hào) 偏移 擴(kuò)展數(shù)據(jù)塊 頁(yè) 分割區(qū) 分割區(qū)
[0] [0] 0 17 179 0 5 0 3(0、1 和 2)
[1] [0] 0 21 219 6 7 0 2(1 和 2)
|
示例 4:
考慮示例 1 中的表空間。若向它添加一個(gè) 50 頁(yè)(5 個(gè)擴(kuò)展數(shù)據(jù)塊)的容器,則將以如下方式將該容器添加至新映射。容器大小不足以從第一個(gè)分割區(qū)(分割區(qū) 0)中開(kāi)始,并在最后一個(gè)分割區(qū)(分割區(qū) 7)處或以外結(jié)束,因此將它定位為在最后一個(gè)分割區(qū)中結(jié)束。(請(qǐng)參閱圖 91。)
圖 91. 帶有四個(gè)容器和 23 個(gè)擴(kuò)展數(shù)據(jù)塊的表空間
相應(yīng)的表空間映射,如表空間快照中所示,類似如下:
范圍 分割集 分割區(qū) 最大 最大 起始 結(jié)束 調(diào)節(jié) 容器
編號(hào) 偏移 擴(kuò)展數(shù)據(jù)塊 頁(yè) 分割區(qū) 分割區(qū)
[0] [0] 0 8 89 0 2 0 3(0、1 和 2)
[1] [0] 0 12 129 3 3 0 4(0、1、2 和 3)
[2] [0] 0 18 189 4 5 0 3(0、2 和 3)
[3] [0] 0 22 229 6 7 0 2(2 和 3)
|
要擴(kuò)展容器,在 ALTER TABLESPACE 語(yǔ)句上使用 EXTEND 或 RESIZE 選項(xiàng)。要添加容器并重新平衡數(shù)據(jù),在 ALTER TABLESPACE 語(yǔ)句上使用 ADD 選項(xiàng)。如果正在向已經(jīng)有多個(gè)分割集的表空間添加容器,則可以指定想要向哪個(gè)分割集添加容器。為此,在 ALTER TABLESPACE 語(yǔ)句上使用 ADD TO STRIPE SET 選項(xiàng)。如果不指定分割集,則缺省行為將是向當(dāng)前分割集添加容器。當(dāng)前分割集是最新創(chuàng)建的分割集,而不是最后向其添加空間的分割集。
對(duì)分割集的任何更改可能導(dǎo)致對(duì)該分割集及其后的任何其他分割集的重新平衡。
可以通過(guò)使用表空間快照來(lái)監(jiān)視重新平衡的進(jìn)度。表空間快照可以提供關(guān)于重新平衡的信息,如重新平衡的開(kāi)始時(shí)間、已經(jīng)移動(dòng)了多少個(gè)擴(kuò)展數(shù)據(jù)塊以及需要移動(dòng)多少個(gè)擴(kuò)展數(shù)據(jù)塊。
沒(méi)有重新平衡(使用分割集)
如果添加或擴(kuò)展容器,并且添加的空間在表空間高水位標(biāo)記之上,則不會(huì)發(fā)生重新平衡。
添加容器將總是在高水位標(biāo)記下添加空間。換句話說(shuō),添加容器時(shí),重新平衡通常是必要的。有一個(gè)選項(xiàng)可強(qiáng)制將新容器添加到高水位標(biāo)記之上,它允許您選擇不對(duì)表空間的內(nèi)容重新平衡。此方法的一個(gè)優(yōu)點(diǎn)是新容器可立即使用。不進(jìn)行重新平衡這一選項(xiàng)僅在添加容器時(shí)才適用,在擴(kuò)展現(xiàn)有容器時(shí)不適用。擴(kuò)展容器時(shí),僅當(dāng)添加的空間在高水位標(biāo)記之上時(shí),才能避免重新平衡。例如,如果有許多大小相同的容器,并且按相同的量擴(kuò)展它們,則擴(kuò)展數(shù)據(jù)塊的相對(duì)位置不會(huì)更改,并且不會(huì)發(fā)生重新平衡。
將容器添加到表空間中而不進(jìn)行重新平衡可通過(guò)添加新的分割集來(lái)實(shí)現(xiàn)。分割集是表空間中的一組容器,數(shù)據(jù)在其上進(jìn)行分割,且獨(dú)立于屬于該表空間的其他容器。現(xiàn)有分割集中的現(xiàn)有容器保持不變,而添加的容器成為新分割集的一部分。
要添加容器而不進(jìn)行重新平衡,在 ALTER TABLESPACE 語(yǔ)句上使用 BEGIN NEW STRIPE SET 選項(xiàng)。
示例 5:
如果表空間有三個(gè)容器,擴(kuò)展數(shù)據(jù)塊大小為 10,并且容器分別為 30、40 和 40 頁(yè)(分別為 3、4 和 4 個(gè)擴(kuò)展數(shù)據(jù)塊),則表空間可進(jìn)行如圖 92 中所示的圖解。
圖 92. 帶有三個(gè)容器和 11 個(gè)擴(kuò)展數(shù)據(jù)塊的表空間
相應(yīng)的表空間映射,如表空間快照中所示,類似如下:
范圍 分割集 分割區(qū) 最大 最大 起始 結(jié)束 調(diào)節(jié) 容器
編號(hào) 偏移 擴(kuò)展數(shù)據(jù)塊 頁(yè) 分割區(qū) 分割區(qū)
[0] [0] 0 8 89 0 2 0 3(0、1 和 2)
[1] [0] 0 10 109 3 3 0 2(1 和 2)
|
示例 6:
在使用 BEGIN NEW STRIPE SET 選項(xiàng)添加 30 頁(yè)和 40 頁(yè)的兩個(gè)新容器(分別為 3 和 4 個(gè)擴(kuò)展數(shù)據(jù)塊)時(shí),不會(huì)影響現(xiàn)有范圍;而是將創(chuàng)建一組新范圍。這一組新范圍是一個(gè)分割集,而最新創(chuàng)建的分割集稱為當(dāng)前分割集。添加了兩個(gè)新的容器之后,表空間將類似圖 93。
相應(yīng)的表空間映射,如表空間快照中所示,類似如下:
范圍 分割集 分割區(qū) 最大 最大 起始 結(jié)束 調(diào)節(jié) 容器
編號(hào) 偏移 擴(kuò)展數(shù)據(jù)塊 頁(yè) 分割區(qū) 分割區(qū)
[0] [0] 0 8 89 0 2 0 3(0、1 和 2)
[1] [0] 0 10 109 3 3 0 2(1 和 2)
[2] [1] 4 16 169 4 6 0 2(3 和 4)
[3] [1] 4 17 179 7 7 0 1(4)
|
如果向表空間添加新的容器,并且未將 TO STRIPE SET 選項(xiàng)與 ADD 子句配合使用,則將把容器添加至當(dāng)前分割集(最高分割集)。可以使用 ADD TO STRIPE SET 子句來(lái)將容器添加到表空間中的任何分割集。必須指定有效的分割集。
DB2 數(shù)據(jù)庫(kù) Linux 版、UNIX 版和 Windows 版使用表空間映射來(lái)跟蹤分割集,并且添加新容器而不進(jìn)行重新平衡通常將導(dǎo)致映射比對(duì)容器進(jìn)行重新平衡時(shí)增長(zhǎng)得快。當(dāng)表空間映射變得過(guò)大時(shí),如果試圖添加更多容器,將接收到錯(cuò)誤 SQL0259N。