DB2 9.5分區(qū)管理以及其應(yīng)用實(shí)踐的詳細(xì)描述
此文章主要向大家講述的是DB2 9.5分區(qū)管理以及其應(yīng)用實(shí)踐,以及對(duì)為什么采用數(shù)據(jù)庫(kù)分區(qū),并且以 Balanced Warehouse E7100 為例對(duì)數(shù)據(jù)庫(kù)分區(qū)管理的基本方法及應(yīng)用實(shí)踐進(jìn)行介紹。
DB2數(shù)據(jù)庫(kù)分區(qū)是 DB2企業(yè)版 DPF(Data Partitioning Feature)選件提供的,它主要用來(lái)為大規(guī)模數(shù)據(jù)處理、高并發(fā)數(shù)據(jù)訪問(wèn)提供支持。DB2數(shù)據(jù)庫(kù)分區(qū)采用 Share-nothing 體系結(jié)構(gòu),數(shù)據(jù)庫(kù)在一個(gè)非共享的環(huán)境中被分解為獨(dú)立的分區(qū),每個(gè)分區(qū)都具有自己的資源,例如內(nèi)存,CPU 和磁盤(pán)以及自己的數(shù)據(jù)、索引、配置文件和事務(wù)日志。數(shù)據(jù)庫(kù)分區(qū)有時(shí)稱為節(jié)點(diǎn)或數(shù)據(jù)庫(kù)節(jié)點(diǎn)。
數(shù)據(jù)通過(guò) Hash 算法均允地散列到不同的分區(qū)內(nèi),每個(gè)分區(qū)只負(fù)責(zé)處理自己的數(shù)據(jù)。當(dāng)用戶發(fā)出 SQL 操作后,被連接的分區(qū)被稱為 Coordinate Node,它負(fù)責(zé)處理用戶的請(qǐng)求,并根據(jù) Partition key 將用戶的請(qǐng)求分解成多個(gè)子任務(wù)交由不同分區(qū)并行處理,***將不同分區(qū)的執(zhí)行結(jié)果經(jīng)過(guò)匯總返回給用戶,分區(qū)對(duì)應(yīng)用來(lái)說(shuō)是透明的。
在 DB2中,數(shù)據(jù)庫(kù)分區(qū)可以部署在集群或 MPP 環(huán)境下,也就是說(shuō)數(shù)據(jù)庫(kù)分區(qū)分布在不同的機(jī)器上;數(shù)據(jù)庫(kù)分區(qū)也可以部署在同一臺(tái) SMP 機(jī)器上,在同一臺(tái)機(jī)器上的分區(qū)我們稱為邏輯分區(qū)。同時(shí),我們還可以在集群或 MPP 環(huán)境下部署多個(gè)分區(qū),在集群或 MPP 每一個(gè)節(jié)點(diǎn)上部署多個(gè)邏輯分區(qū)。
DB2數(shù)據(jù)庫(kù)分區(qū)提供了強(qiáng)大的可擴(kuò)展能力。由于采用 Share-nothing 體系結(jié)構(gòu),每個(gè)分區(qū)(節(jié)點(diǎn))只處理它那一部分?jǐn)?shù)據(jù),分區(qū)之間盡可能獨(dú)立,這就減少了節(jié)點(diǎn)間共享資源的爭(zhēng)用,允許數(shù)據(jù)庫(kù)有效地伸縮以支持更大的數(shù)據(jù)規(guī)模及更多的用戶訪問(wèn)。DB2數(shù)據(jù)庫(kù)分區(qū)提供 scale up (垂直擴(kuò)展)及 scale out (水平擴(kuò)展)能力。
垂直擴(kuò)展是通過(guò)增加機(jī)器的物理資源如 cpu、磁盤(pán)、內(nèi)存來(lái)實(shí)現(xiàn)的;水平擴(kuò)展是通過(guò)增加物理機(jī)器來(lái)實(shí)現(xiàn)的,DB2中,最多可以支持 1000 個(gè)分區(qū)。在規(guī)劃 DB2數(shù)據(jù)庫(kù)分區(qū)時(shí),我們需要考慮是通過(guò)增加邏輯分區(qū)還是物理分區(qū)來(lái)實(shí)現(xiàn)擴(kuò)展能力。
如果一臺(tái)物理機(jī)器上有多個(gè) CPU,其物理資源可以允許多個(gè)分區(qū)共享該資源,我們可以通過(guò)增加邏輯分區(qū)來(lái)實(shí)現(xiàn)擴(kuò)展;如果一臺(tái)物理機(jī)器上的物理資源不能滿足應(yīng)用需求,我們就需要通過(guò)增加機(jī)器,也就是物理分區(qū)來(lái)實(shí)現(xiàn)擴(kuò)展能力。
DB2數(shù)據(jù)庫(kù)分區(qū)還提供了強(qiáng)大的并行處理能力。首先,它提供了 inter-partition parallelism 分區(qū)間的并行機(jī)制,通過(guò)hash算法將數(shù)據(jù)庫(kù)請(qǐng)求分成多個(gè)任務(wù)在不同的分區(qū)上并行執(zhí)行,同時(shí),提供了 intra-partition parallelism 分區(qū)內(nèi)的并行機(jī)制,將任務(wù)分解成不同的子任務(wù),在不同的 CPU 上并行執(zhí)行,另外,我們還可以同時(shí)利用 inter-partition parallelism、intra-partition parallelism 來(lái)實(shí)現(xiàn)完全的并行處理能力。DB2數(shù)據(jù)庫(kù)的查詢操作、backup/restore/load 等實(shí)用程序及 I/O 操作都可以通過(guò)上述的并行處理能力來(lái)顯著提高其性能。
為什么采用數(shù)據(jù)庫(kù)分區(qū)
采用數(shù)據(jù)庫(kù)分區(qū),可以為您帶來(lái)如下好處:
查詢擴(kuò)展性
這是采用數(shù)據(jù)庫(kù)分區(qū)最主要的原因之一。將一個(gè)大的數(shù)據(jù)庫(kù)分成多個(gè)小的數(shù)據(jù)庫(kù)可以提高查詢的性能,因?yàn)槊總€(gè)數(shù)據(jù)庫(kù)分區(qū)擁有自己的一小部分?jǐn)?shù)據(jù)。假設(shè)您想掃描1億條記錄,對(duì)一個(gè)單一分區(qū)的數(shù)據(jù)庫(kù)來(lái)講,該掃描操作需要數(shù)據(jù)庫(kù)管理器獨(dú)立掃描一億條記錄,如果您將數(shù)據(jù)庫(kù)系統(tǒng)做成50個(gè)分區(qū),并將這1億條記錄平均分配到這50個(gè)分區(qū)上,那么每個(gè)數(shù)據(jù)庫(kù)分區(qū)的數(shù)據(jù)庫(kù)管理器將只掃描200萬(wàn)記錄。
架構(gòu)限制
在DB2V8和以前版本,非分區(qū)數(shù)據(jù)庫(kù)的***的表取決于頁(yè)面大小,4K頁(yè)***支持64 GB,32K頁(yè)***支持512 GB數(shù)據(jù)量。表和表空間大小限制是每個(gè)分區(qū)上的限制,因此將數(shù)據(jù)庫(kù)分成N個(gè)分區(qū)可以將表的***尺寸增加為單個(gè)分區(qū)表***尺寸的N倍。內(nèi)存也可能是個(gè)限制,特別是在32為操作系統(tǒng)環(huán)境,因?yàn)槊總€(gè)數(shù)據(jù)庫(kù)DB2 9.5分區(qū)管理并擁有自己的資源,因此通過(guò)數(shù)據(jù)庫(kù)分區(qū)可以克服這個(gè)限制。
數(shù)據(jù)庫(kù)裝載性能
數(shù)據(jù)庫(kù)分區(qū)可以并行裝載數(shù)據(jù)到所有數(shù)據(jù)庫(kù)分區(qū),極大減少單表的裝載時(shí)間,這對(duì)于像實(shí)時(shí)商業(yè)智能系統(tǒng)那樣對(duì)數(shù)據(jù)裝載的時(shí)間要求特別高的系統(tǒng)特別重要。
數(shù)據(jù)庫(kù)維護(hù)性能
將數(shù)據(jù)庫(kù)分散到多個(gè)數(shù)據(jù)庫(kù)分區(qū)服務(wù)器可以加快系統(tǒng)維護(hù),因?yàn)槊總€(gè)操作都運(yùn)行在分區(qū)所管理的一個(gè)數(shù)據(jù)子集上面,這樣可以通過(guò)數(shù)據(jù)庫(kù)分區(qū)進(jìn)一步減少創(chuàng)建索引的時(shí)間,減少搜集統(tǒng)計(jì)信息的時(shí)間,因?yàn)閞unstats僅運(yùn)行在一個(gè)數(shù)據(jù)庫(kù)分區(qū)上面,減少表重整(reorg)的時(shí)間。
備份/恢復(fù)性能
將數(shù)據(jù)庫(kù)分區(qū)到不同的數(shù)據(jù)庫(kù)服務(wù)器上可以大大減少數(shù)據(jù)庫(kù)備份的時(shí)間,這往往是決定是否使用數(shù)據(jù)庫(kù)分區(qū)很重要的一點(diǎn)。DB2通過(guò)為每個(gè)表空間分配獨(dú)立的進(jìn)程或線程來(lái)實(shí)現(xiàn)備份和恢復(fù)操作的并行處理的。在分區(qū)數(shù)據(jù)庫(kù)環(huán)境的備份中,每個(gè)分區(qū)的備份是獨(dú)立的,通過(guò)并行備份數(shù)據(jù)庫(kù)分區(qū)可以大大減少備份整個(gè)數(shù)據(jù)庫(kù)的時(shí)間。
日志
在高度活動(dòng)的系統(tǒng)中,數(shù)據(jù)庫(kù)日志的性能可能會(huì)限制系統(tǒng)的整體吞吐量。在分區(qū)數(shù)據(jù)庫(kù)環(huán)境中,每個(gè)分區(qū)有自己一套日志。當(dāng)大量插入、更新、刪除操作時(shí),多個(gè)數(shù)據(jù)庫(kù)分區(qū)可以提高性能,因?yàn)槿罩臼窃诿總€(gè)數(shù)據(jù)庫(kù)分區(qū)上是并行寫(xiě)的,且每個(gè)單一的分區(qū)需要記錄的日志更少。
DB2隨數(shù)據(jù)量或處理器和分區(qū)的增加,提供近線性的擴(kuò)展能力,可是,數(shù)據(jù)庫(kù)分區(qū)是否提供最多的益處依賴于處理的工作負(fù)荷、***表的大小及其他因素。
什么時(shí)候采用數(shù)據(jù)庫(kù)分區(qū)
設(shè)計(jì)數(shù)據(jù)庫(kù)分區(qū)的基本原則是,盡量將大表分布在所有的分區(qū)上,提高并行處理能力;將小表放置在盡量少的分區(qū)上,一般是建議放在單一分區(qū)上;盡量減少分區(qū)間的通信。對(duì)于是否采用數(shù)據(jù)庫(kù)分區(qū),除了考慮上一節(jié)提到的分區(qū)的優(yōu)勢(shì)之外,我們也要根據(jù)分區(qū)設(shè)計(jì)原則來(lái)考慮:
選擇數(shù)據(jù)庫(kù)分區(qū)的一個(gè)比較理想的場(chǎng)景是執(zhí)行一條像 ” select count(*) from big_table”這樣的語(yǔ)句。如果將這個(gè)表放在所有分區(qū)上,則每個(gè)分區(qū)都可以計(jì)算該表在其上的行數(shù),并將這個(gè)局部總數(shù)(subtotal)發(fā)送到協(xié)調(diào)分區(qū),以便計(jì)算總和,而這里的通信成本比起每個(gè)分區(qū)上所做的工作來(lái)可以忽略不計(jì)。
另一個(gè)非常合適的場(chǎng)景是, 一個(gè)大表與幾個(gè)非常小的很少更新的表相連接。大表是分區(qū)的,小表則被復(fù)制到每個(gè)分區(qū)上,這樣就可以并置連接。
不適合使用分區(qū)的是那些在連接時(shí)涉及很多大表和各種各樣的表和列的 ad hoc 查詢環(huán)境。在那些情況下, 很難或者不可能選擇表的分區(qū)鍵,使得所有大的查詢執(zhí)行起來(lái)沒(méi)有很多的分區(qū)間通信。
同樣不適合使用分區(qū)的是那些有多條不能在單個(gè)分區(qū)內(nèi)處理的非常小的語(yǔ)句。在這種情況下,分區(qū)間通信的開(kāi)銷比起這些語(yǔ)句的本地執(zhí)行來(lái)就相當(dāng)高,而如果使用分區(qū)的話(尤其是跨多個(gè)物理系統(tǒng)),響應(yīng)時(shí)間就會(huì)大大惡化。
大多數(shù)工作負(fù)載和一些特定的任務(wù)都處于剛才討論的這兩種極端之間,這些地方都需要通過(guò)原型來(lái)研究使用分區(qū)所帶來(lái)的影響,以上的相關(guān)內(nèi)容就是對(duì)DB2 9.5分區(qū)管理以及其應(yīng)用實(shí)踐的介紹,望你能有所收獲。
【編輯推薦】
- 對(duì)DB2 實(shí)現(xiàn)split的操作流程描述
- JDBC連接DB2數(shù)據(jù)庫(kù)的“捷徑”
- IBM DB2 Catalog如何正確應(yīng)用?
- DB2連接端口不能啟動(dòng)這一問(wèn)題的殲滅
- DB2占用端口號(hào)如何在Linux或Unix下查看?