以下的文章主要向大家講述的是DB2分區數據庫中的相關數據分布傾斜現象與重新分布的實際操作方法的描述,你如果對DB2分區數據庫中的相關數據分布傾斜現象與重新分布的實際操作方法的描述有興趣的話你就可以點擊以下的文章進行觀看了。
數據庫, 分區, 現象數據庫, 分區, 現象
環境
產品:DB2 UDB
平台:跨平台
軟件:V8,V9
問題
主要描述了DB2分區數據庫中的數據分布不均現象,以及如何對數據進行重新分布的方法。
解答
DB2的數據庫分區功能使用戶能更具靈活的控制數據的分布,通過對分區鍵(partition key)的選擇,用戶可以控制他們數據的分布,同時也能通過選擇分區組(partition group)決定把他們的數據分布在哪些分區上,此外還提供了一個分區鍵在分區上的詳細分區映射(partition map)。
分區數據庫通過提供對分布在各個分區上的數據的並發訪問,提高了應用程序訪問操作的性能,但這同時也增加了分區數據庫日常維護的復雜性.
數據在DB2分區數據庫的存取分布策略是用分區鍵值通過哈希算法(hashing algorithm)得到的值,根據對應的分區映射(partition map)散列到各個分區的.而用戶數據的差異以及分區鍵選擇的不合理導致最終的分布往往發生數據傾斜(data skew).
下面這個例子是一個兩台物理機器4個邏輯節點的數據庫,我向一個空表導入10240條數據(由1-20的int數字循環組成)後查看數據在各個分區節點中的分布情況是:
例1:
- db2 "select dbpartitionnum(i),count(*) from load_dpf group by dbpartitionnum(i) order by dbpartitionnum(i)"
可以看到數據並沒有在各個節點上均勻分布,而是發生了一定的數據傾斜(data skew)。通常情況下,數據在分區中的分布都會發生一定的傾斜,如果傾斜程度不大,就不會有太大影響,所以不用人為干預,但是在下面所列情況下就需要對數據在各分區的分布進行調整了:
A. 如果傾斜過大,將會使系統I/O的負荷也隨之傾斜,導致某些分區的I/O過大而產生瓶頸,而不能均勻發揮所有I/O的性能.在這種情況下需要人為干預,利用redistribute partition group 命令來重新分布數據.
B. 如果需要從分區組中移出某個分區,也同樣需要利用redistribute partition group 命令來重新分布數據,把數據從那個即將移出的分區上重新分布到其他分區.
C. 將一個新的分區加入分區組後,同樣需要把其他分區上的數據分布到新添加分區,類似rebalance操作.
下面是redistribute的語法:
其中各個參數的詳細解釋可以參閱信息中心的相關解釋:
http://publib.boulder.ibm.com/in ... /core/r0002069.htm?
默認分區映射如下:
1. UNIFORM : 這種形式的重分布是將數據盡量均勻的分布到各個哈希分區(hash partition)(hash partition 共有4096個)。雖然數據均勻分布到各個哈希分區(hash partition)上,但是同樣的哈希分區(hash parititon)數並不一定映射到每個數據庫分區(database partition)上.在重分布完成後,各個數據庫分區將擁有相近的哈希分區(hash partition)個數
在分區鍵值沒有發生傾斜的時候,UNIFORM能夠將數據接近平均的分布到每個數據庫分區上,所以此方法大多數用於第上面C類情況.
2. USING DISTFILE : 這種形式的分布多用於分區鍵本身的值就已經發生了傾斜,如上例1的分區鍵就是1-20的循環數字.在這種情況下,根據hash算法產生的結果發生了傾斜.這時候就需要人工指定一個分布文件來替代系統產生的結果.