溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

DB2分區(qū)數(shù)據(jù)庫淺析

發(fā)布時間:2020-07-07 22:00:04 來源:網(wǎng)絡(luò) 閱讀:5128 作者:amount1234 欄目:數(shù)據(jù)庫

1、概念描述

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ū)實例圖:

DB2分區(qū)數(shù)據(jù)庫淺析

2、DPF對數(shù)據(jù)庫性能產(chǎn)生的影響

數(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)

 

3、DB2分區(qū)與Oracle的比較

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
 
  (partition_id id NOT NULL,
 
   partition_id VARCHAR(20) NOT NULL)
      
IN tbsp_parts
 
 DISTRIBUTE BY   HASH (partition_id);

CREATE TABLE hash_tablename
 
  (hash_part id,
       hash_id
varchar2(20))
       PARTITION
BY   HASH(hash_id)
      (partition p1 tablespace tbsp1,
 
  partition p2 tablespace   tbsp2);

 

4、總結(jié)

此次分享旨在簡單介紹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!所以,自己需要的,才是最好的。


向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI