您好,登錄后才能下訂單哦!
DB2 數(shù)據(jù)庫分區(qū)是 DB2 企業(yè)版 DPF(Data Partitioning Feature)選件提供的,它主要用來個分區(qū)(邏輯的或物理的)上分布大型數(shù)據(jù)庫提供了必要的可伸縮性,并利用了一個無共享(shared-nothing)結(jié)構(gòu)。數(shù)據(jù)庫在一個非共享的環(huán)境中被分解為獨立的分區(qū),每個分區(qū)都具有自己的資源,例如內(nèi)存,CPU 和磁盤以及自己的數(shù)據(jù)、索引、配置文件和事務(wù)日志。數(shù)據(jù)庫分區(qū)有時稱為節(jié)點或數(shù)據(jù)庫節(jié)點。通過 DPF“分治”的處理,可伸縮性可在單一服務(wù)器(縱向擴展)或跨服務(wù)器集群(橫向擴展)中獲得增強。
使用 DPF最顯而易見的理由之一就是提高查詢工作負載和 INSERT/UPDATE/DELETE 操作的性能。DPF 還可以克服部分 DB2 的架構(gòu)限制。例如,在 DB2 中,對 4 KB 的頁面大小而言,表的最大大小是 64 GB;對于 8 KB 的頁面大小而言,表的最大大小是 128 GB;對于 16 KB 的頁面大小而言,表的最大大小是 256 GB;對于 32 KB 的頁面大小而言,表的最大大小是 512 GB。在 DB2 中,表和表空間的大小限制是根據(jù)每個分區(qū)進行規(guī)定的。跨多個分區(qū)劃分數(shù)據(jù)庫將允許您根據(jù)環(huán)境中分區(qū)數(shù)目的因數(shù)來增加表的最大大小。
DB2數(shù)據(jù)庫分區(qū)實例圖:
數(shù)據(jù)是通過Hash算法均允地散列到不同的分區(qū)內(nèi)的,每個分區(qū)只負責處理自己的數(shù)據(jù)。用戶發(fā)出 SQL 操作后,被連接的分區(qū)被稱為 Coordinate Node,它負責處理用戶的請求,并根據(jù) Partition key(分區(qū)鍵)將用戶的請求分解成多個子任務(wù)交由不同分區(qū)并行處理,最后將不同分區(qū)的執(zhí)行結(jié)果經(jīng)過匯總返回給用戶,分區(qū)對應(yīng)用來說是透明的。
在 DB2 中,數(shù)據(jù)庫分區(qū)可以部署在集群或 MPP(多臺單個CPU的機器上,建立的一個有多個partition的DB2實例,在其中的每臺機器上建立1個Partition)環(huán)境下,也就是說數(shù)據(jù)庫分區(qū)分布在不同的機器上;數(shù)據(jù)庫分區(qū)也可以部署在同一臺 SMP(一臺有多個CPU的機器上,建立的一個有多個分區(qū)的DB2實例,其中分區(qū)數(shù)量不超過已有CPU的數(shù)量)機器上,在同一臺機器上的分區(qū)我們稱為邏輯分區(qū)。同時,我們還可以在集群或 MPP 環(huán)境下部署多個分區(qū),在集群或 MPP 每一個節(jié)點上部署多個邏輯分區(qū)。
采用數(shù)據(jù)庫分區(qū)有幾個好處,以下簡單介紹一下:
查詢擴展性
這是采用數(shù)據(jù)庫分區(qū)最主要的原因之一。將一個大的數(shù)據(jù)庫分成多個小的數(shù)據(jù)庫可以提高查詢的性能,因為每個數(shù)據(jù)庫分區(qū)擁有自己的一部分數(shù)據(jù)。假設(shè)現(xiàn)在掃描10萬條記錄,對一個單一分區(qū)的數(shù)據(jù)庫來講,該掃描操作需要數(shù)據(jù)庫管理器獨立掃描10萬條記錄,如果將數(shù)據(jù)庫系統(tǒng)做成10個分區(qū),并將這10萬條記錄平均分配到這10個分區(qū)上,那么每個數(shù)據(jù)庫分區(qū)的數(shù)據(jù)庫管理器只掃描10萬記錄。
架構(gòu)限制
非分區(qū)數(shù)據(jù)庫的最大的表取決于頁面大小,4K頁最大支持64 GB,32K頁最大支持512 GB數(shù)據(jù)量。表和表空間大小限制是每個分區(qū)上的限制,因此將數(shù)據(jù)庫分成N個分區(qū)可以將表的最大尺寸增加為單個分區(qū)表最大尺寸的N倍。內(nèi)存也可能是個限制,特別是在32位操作系統(tǒng)環(huán)境,因為每個數(shù)據(jù)庫分區(qū)管理并擁有自己的資源,因此通過數(shù)據(jù)庫分區(qū)可以克服這個限制。
數(shù)據(jù)庫裝載性能
數(shù)據(jù)庫分區(qū)可以并行裝載數(shù)據(jù)到所有數(shù)據(jù)庫分區(qū),極大減少單表的裝載時間,這對于像實時商業(yè)智能系統(tǒng)那樣對數(shù)據(jù)裝載的時間要求特別高的系統(tǒng)特別重要。
數(shù)據(jù)庫維護性能
將數(shù)據(jù)庫分散到多個數(shù)據(jù)庫分區(qū)服務(wù)器可以加快系統(tǒng)維護,因為每個操作都運行在分區(qū)所管理的一個數(shù)據(jù)子集上面,這樣可以通過數(shù)據(jù)庫分區(qū)進一步減少創(chuàng)建索引的時間,減少搜集統(tǒng)計信息的時間,因為runstats僅運行在一個數(shù)據(jù)庫分區(qū)上面,減少表重整(reorg)的時間。
備份/恢復(fù)性能
將數(shù)據(jù)庫分區(qū)到不同的數(shù)據(jù)庫服務(wù)器上可以大大減少數(shù)據(jù)庫備份的時間,這也是是決定是否使用數(shù)據(jù)庫分區(qū)很重要的一點。DB2 通過為每個表空間分配獨立的進程或線程來實現(xiàn)備份和恢復(fù)操作的并行處理。在分區(qū)數(shù)據(jù)庫環(huán)境的備份中,每個分區(qū)的備份是獨立的,通過并行備份數(shù)據(jù)庫分區(qū)可以大大減少備份整個數(shù)據(jù)庫的時間。
日志
在高度活動的系統(tǒng)中,數(shù)據(jù)庫日志的性能可能會限制系統(tǒng)的整體吞吐量。在分區(qū)數(shù)據(jù)庫環(huán)境中,每個分區(qū)有自己一套日志。當大量插入、更新、刪除操作時,多個數(shù)據(jù)庫分區(qū)可以提高性能,因為日志是在每個數(shù)據(jù)庫分區(qū)上并行寫入,而且每個分區(qū)需要記錄的日志更少。
DB2 隨數(shù)據(jù)量或處理器和分區(qū)的增加,可以提供近線性的擴展能力,可是,數(shù)據(jù)庫分區(qū)是否提供最多的益處依賴于處理的工作負荷、最大表的大小及其他因素。目前我們項目的數(shù)據(jù)倉庫也是使用數(shù)據(jù)庫分區(qū),因為數(shù)據(jù)量較大,并且業(yè)務(wù)對CPU的需求也比較大,但是機器較老,單機無法增加更多CPU,并且一個實例上要實現(xiàn)多個分區(qū),所以采用了另外一種SMP Cluster(多臺有多個CPU的機器上,建立的一個有多個partition的DB2 Instance,在其中的每臺機器上建立多個Partition)
Oracle分區(qū) | DB2分區(qū) | Oracle 10g語法 | DB2 V9語法 |
區(qū)間分區(qū)(Range Partitioning) | 表分區(qū)(Table Partitioning) | PARTITION BY RANGE | PARTITION BY RANGE |
哈希分區(qū)(Hash Partitioning) | 數(shù)據(jù)庫分區(qū)(Database Partitioning) | PARTITION BY HASH | DISTRIBUTE BY HASH |
列表分區(qū)(List Partitioning) | 帶生成列表分區(qū)(Table Partitioning With Generated Column) | PARTITION BY LIST | PARTITION BY RANGE |
不支持 | 多維集群(Multidimensional clustering) | 無 | ORGANIZE BY DIMENSION |
以數(shù)據(jù)庫分區(qū)為例,以下是DB2的數(shù)據(jù)庫分區(qū)與Oracle哈希分區(qū)特性的比較:
DB2分區(qū) | Oracle分區(qū) | |
分區(qū)架構(gòu) | Share-nothing | Share-disk |
分區(qū)特性 | 每個CPU都有私有內(nèi)存區(qū)域和私有磁盤空間,并且兩個CPU不能訪問相同磁盤空間,CPU之間的通訊通過網(wǎng)絡(luò)連接。 | 每個CPU使用自己的私有內(nèi)存區(qū)域,通過內(nèi)部通訊機制直接訪問所有磁盤系統(tǒng)。 |
兩者區(qū)別 | 可伸縮性 —— 隨著數(shù)據(jù)庫的增長可物理性的增加計算資源(也就是數(shù)據(jù)庫分區(qū)) | 無法通過增加物理的partition來給數(shù)據(jù)庫擴容 |
語句示例 | partition_tablename表選擇partition_ id字段作為分區(qū)鍵 | hash_tablename表按照hash_part字段進行哈希分區(qū),每個分區(qū)以循環(huán)的方式放置在表空間tbsp1和tbsp2中。 |
CREATE TABLE partition_tablename | CREATE TABLE hash_tablename |
此次分享旨在簡單介紹DB2分區(qū)的概念,并與Oracle的分區(qū)做比較。分區(qū)數(shù)據(jù)庫為提高查詢工作負載和 DML操作的性能提供了便利。 如果數(shù)據(jù)量較小,性能提升并不會很明顯,所以分區(qū)數(shù)據(jù)庫一般用在數(shù)據(jù)量較大,查詢需求較頻繁的數(shù)據(jù)庫。其實使用Oracle好還是DB2好并沒有絕對的選擇。例如Oracle采用完全開放策略,可以使客戶選擇最適合的解決方案,對開發(fā)商全力支持;DB2則最適于海量數(shù)據(jù),并且在企業(yè)級的應(yīng)用最為廣泛,可伸縮性及并行性強。就像廣東的老火湯很有味道,很滋補,中國人可能都喜歡喝,但是外國人覺得他們的羅宋湯那種很粘稠的才叫做湯,中國這種頂多叫Water!所以,自己需要的,才是最好的。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。