偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

DB2 9.5 數(shù)據(jù)庫分區(qū)管理及應(yīng)用實踐

運維 數(shù)據(jù)庫運維 數(shù)據(jù)庫
本文主要介紹什么是 DB2 數(shù)據(jù)庫分區(qū),為什么采用數(shù)據(jù)庫分區(qū),并以 Balanced Warehouse E7100 為例介紹數(shù)據(jù)庫分區(qū)管理的基本方法及應(yīng)用實踐。

本文主要介紹什么是 DB2 數(shù)據(jù)庫分區(qū),為什么采用數(shù)據(jù)庫分區(qū),并以 Balanced Warehouse E7100 為例介紹數(shù)據(jù)庫分區(qū)管理的基本方法及應(yīng)用實踐。

DB2 數(shù)據(jù)庫分區(qū)是 DB2 企業(yè)版 DPF(Data Partitioning Feature)選件提供的,它主要用來為大規(guī)模數(shù)據(jù)處理、高并發(fā)數(shù)據(jù)訪問提供支持。DB2 數(shù)據(jù)庫分區(qū)采用 Share-nothing 體系結(jié)構(gòu),數(shù)據(jù)庫在一個非共享的環(huán)境中被分解為獨立的分區(qū),每個分區(qū)都具有自己的資源,例如內(nèi)存,CPU 和磁盤以及自己的數(shù)據(jù)、索引、配置文件和事務(wù)日志。數(shù)據(jù)庫分區(qū)有時稱為節(jié)點或數(shù)據(jù)庫節(jié)點。如下圖所示:

圖 1. DB2 數(shù)據(jù)庫分區(qū)示例圖

數(shù)據(jù)通過 Hash 算法均允地散列到不同的分區(qū)內(nèi),每個分區(qū)只負責(zé)處理自己的數(shù)據(jù)。當(dāng)用戶發(fā)出 SQL 操作后,被連接的分區(qū)被稱為 Coordinate Node,它負責(zé)處理用戶的請求,并根據(jù) Partition key 將用戶的請求分解成多個子任務(wù)交由不同分區(qū)并行處理,最后將不同分區(qū)的執(zhí)行結(jié)果經(jīng)過匯總返回給用戶,分區(qū)對應(yīng)用來說是透明的。

在 DB2 中,數(shù)據(jù)庫分區(qū)可以部署在集群或 MPP 環(huán)境下,也就是說數(shù)據(jù)庫分區(qū)分布在不同的機器上;數(shù)據(jù)庫分區(qū)也可以部署在同一臺 SMP 機器上,在同一臺機器上的分區(qū)我們稱為邏輯分區(qū)。同時,我們還可以在集群或 MPP 環(huán)境下部署多個分區(qū),在集群或 MPP 每一個節(jié)點上部署多個邏輯分區(qū)。

DB2 數(shù)據(jù)庫分區(qū)提供了強大的可擴展能力。由于采用 Share-nothing 體系結(jié)構(gòu),每個分區(qū)(節(jié)點)只處理它那一部分數(shù)據(jù),分區(qū)之間盡可能獨立,這就減少了節(jié)點間共享資源的爭用,允許數(shù)據(jù)庫有效地伸縮以支持更大的數(shù)據(jù)規(guī)模及更多的用戶訪問。DB2 數(shù)據(jù)庫分區(qū)提供 scale up (垂直擴展)及 scale out (水平擴展)能力。垂直擴展是通過增加機器的物理資源如 cpu、磁盤、內(nèi)存來實現(xiàn)的;水平擴展是通過增加物理機器來實現(xiàn)的,DB2 中,最多可以支持 1000 個分區(qū)。在規(guī)劃 DB2 數(shù)據(jù)庫分區(qū)時,我們需要考慮是通過增加邏輯分區(qū)還是物理分區(qū)來實現(xiàn)擴展能力。如果一臺物理機器上有多個 CPU,其物理資源可以允許多個分區(qū)共享該資源,我們可以通過增加邏輯分區(qū)來實現(xiàn)擴展;如果一臺物理機器上的物理資源不能滿足應(yīng)用需求,我們就需要通過增加機器,也就是物理分區(qū)來實現(xiàn)擴展能力。

DB2 數(shù)據(jù)庫分區(qū)還提供了強大的并行處理能力。首先,它提供了 inter-partition parallelism 分區(qū)間的并行機制,通過hash算法將數(shù)據(jù)庫請求分成多個任務(wù)在不同的分區(qū)上并行執(zhí)行,同時,提供了 intra-partition parallelism 分區(qū)內(nèi)的并行機制,將任務(wù)分解成不同的子任務(wù),在不同的 CPU 上并行執(zhí)行,另外,我們還可以同時利用 inter-partition parallelism、intra-partition parallelism 來實現(xiàn)完全的并行處理能力。DB2 數(shù)據(jù)庫的查詢操作、backup/restore/load 等實用程序及 I/O 操作都可以通過上述的并行處理能力來顯著提高其性能。如下圖所示:

圖 2. DB2 數(shù)據(jù)庫分區(qū)并行處理示例圖

為什么采用數(shù)據(jù)庫分區(qū)

采用數(shù)據(jù)庫分區(qū),可以為您帶來如下好處:

查詢擴展性

這是采用數(shù)據(jù)庫分區(qū)最主要的原因之一。將一個大的數(shù)據(jù)庫分成多個小的數(shù)據(jù)庫可以提高查詢的性能,因為每個數(shù)據(jù)庫分區(qū)擁有自己的一小部分數(shù)據(jù)。假設(shè)您想掃描1億條記錄,對一個單一分區(qū)的數(shù)據(jù)庫來講,該掃描操作需要數(shù)據(jù)庫管理器獨立掃描一億條記錄,如果您將數(shù)據(jù)庫系統(tǒng)做成50個分區(qū),并將這1億條記錄平均分配到這50個分區(qū)上,那么每個數(shù)據(jù)庫分區(qū)的數(shù)據(jù)庫管理器將只掃描200萬記錄。

架構(gòu)限制

在DB2 V8和以前版本,非分區(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ū)有自己一套日志。當(dāng)大量插入、更新、刪除操作時,多個數(shù)據(jù)庫分區(qū)可以提高性能,因為日志是在每個數(shù)據(jù)庫分區(qū)上是并行寫的,且每個單一的分區(qū)需要記錄的日志更少。

DB2 隨數(shù)據(jù)量或處理器和分區(qū)的增加,提供近線性的擴展能力,可是,數(shù)據(jù)庫分區(qū)是否提供最多的益處依賴于處理的工作負荷、最大表的大小及其他因素。

什么時候采用數(shù)據(jù)庫分區(qū)

設(shè)計數(shù)據(jù)庫分區(qū)的基本原則是,盡量將大表分布在所有的分區(qū)上,提高并行處理能力;將小表放置在盡量少的分區(qū)上,一般是建議放在單一分區(qū)上;盡量減少分區(qū)間的通信。對于是否采用數(shù)據(jù)庫分區(qū),除了考慮上一節(jié)提到的分區(qū)的優(yōu)勢之外,我們也要根據(jù)分區(qū)設(shè)計原則來考慮:

選擇數(shù)據(jù)庫分區(qū)的一個比較理想的場景是執(zhí)行一條像 ” select count(*) from big_table”這樣的語句。如果將這個表放在所有分區(qū)上,則每個分區(qū)都可以計算該表在其上的行數(shù),并將這個局部總數(shù)(subtotal)發(fā)送到協(xié)調(diào)分區(qū),以便計算總和,而這里的通信成本比起每個分區(qū)上所做的工作來可以忽略不計。

另一個非常合適的場景是, 一個大表與幾個非常小的很少更新的表相連接。大表是分區(qū)的,小表則被復(fù)制到每個分區(qū)上,這樣就可以并置連接。

不適合使用分區(qū)的是那些在連接時涉及很多大表和各種各樣的表和列的 ad hoc 查詢環(huán)境。在那些情況下, 很難或者不可能選擇表的分區(qū)鍵,使得所有大的查詢執(zhí)行起來沒有很多的分區(qū)間通信。

同樣不適合使用分區(qū)的是那些有多條不能在單個分區(qū)內(nèi)處理的非常小的語句。在這種情況下,分區(qū)間通信的開銷比起這些語句的本地執(zhí)行來就相當(dāng)高,而如果使用分區(qū)的話(尤其是跨多個物理系統(tǒng)),響應(yīng)時間就會大大惡化。

大多數(shù)工作負載和一些特定的任務(wù)都處于剛才討論的這兩種極端之間,這些地方都需要通過原型來研究使用分區(qū)所帶來的影響。

#p#

數(shù)據(jù)庫分區(qū)實現(xiàn)

下邊,我們以 IBM InfoSphere Balanced Warehouse E7100 為例,介紹一下DB2 分區(qū)數(shù)據(jù)庫在AIX下的基本管理方法及應(yīng)用實踐。DB2 分區(qū)數(shù)據(jù)庫在 Windows 環(huán)境下的管理方法和 AIX 略有不同,具體請參閱相關(guān)手冊。

IBM InfoSphere Balanced Warehouse 是IBM針對客戶數(shù)據(jù)倉庫系統(tǒng)提出的一整套完整的解決方案。當(dāng)用戶實施一個數(shù)據(jù)倉庫系統(tǒng)時,對用戶來說,一個非常大的挑戰(zhàn)就是未來的數(shù)據(jù)倉庫系統(tǒng)應(yīng)該選擇什么樣的服務(wù)器,服務(wù)器的配置是什么,選擇多少臺服務(wù)器;選擇什么樣的存儲設(shè)備,存儲容量要多大,存儲設(shè)備配置是什么;選擇什么樣的網(wǎng)絡(luò)設(shè)備,它的配置是什么才能保證系統(tǒng)性能高效、穩(wěn)定。同時,隨著系統(tǒng)的應(yīng)用,數(shù)據(jù)量會急劇增長,如何在保證系統(tǒng)性能的前提下,提供更好的系統(tǒng)擴展能力也是用戶非常關(guān)心的問題。為了解決上述問題,IBM 結(jié)合自己多年實施客戶數(shù)據(jù)倉庫系統(tǒng)的經(jīng)驗,并協(xié)同IBM軟件部門、服務(wù)器部門、存儲部門及實驗室,共同推出了 InfoSphere Balanced Warehouse 解決方案,有時也稱為 BCU(Balanced Configuration Unit)。InfoSphere Balanced Warehouse 是一個包含服務(wù)器、存儲、數(shù)據(jù)倉庫軟件在內(nèi)的完整解決方案,它基于 IBM 最佳實踐并得到充分驗證,是一個預(yù)先配置好的、可立即使用的解決方案,客戶無需靠猜測或假象去配置并驗證,實現(xiàn)開箱即用。InfoSphere Balanced Warehouse 采用平衡的理念,每個組件(數(shù)據(jù)庫、服務(wù)器和存儲)提供均衡的性能確保整體方案性能最優(yōu)。同時,它采用可擴展的模塊化設(shè)計,數(shù)據(jù)倉庫系統(tǒng)在整個生命周期中,可以以增量的方式進行擴展,達到的性能可預(yù)見、可度量。

InfoSphere Balanced Warehouse主要由以下幾個模塊組成:如下圖:

圖 3. InfoSphere Balanced Warehouse 模塊組成
 

Foundation Module: 有時也稱為 administration BCU。該模塊主要包括編目分區(qū)、協(xié)調(diào)分區(qū)以及單分區(qū)表。系統(tǒng)必須要有 1 個 Foundation Module。

Data Module: 有時也稱為 data BCU。該模塊主要保存分區(qū)表數(shù)據(jù)。根據(jù)數(shù)據(jù)量,可以有 1 個或多個 Data Module。

User Module: 如果系統(tǒng)有大量用戶訪問,我們可以考慮增加 User Module。

Failover Module: 用于滿足 HA 的需求。

Application Module: 用于運行應(yīng)用程序,比如說 ETL 應(yīng)用就可以配置在 Application Module 上。

本次配置環(huán)境包括一個 administration BCU 和 2 個 data BCU,如下圖所示:

圖 4. InfoSphere Balanced Warehouse 配置圖

創(chuàng)建實例及配置通信連接

使用db2icrt命令創(chuàng)建實例

/opt/IBM/db2/V9.1/instance/db2icrt -u bcufenc bcuaix

配置TCPIP通信服務(wù)

db2set DB2COMM=tcpip

修改DBM CFG 中的 SVCENAME參數(shù)

db2 update dbm config using svcename xbcuaix

在實例級禁用fault monitor

db2fm -i instance_name -f no

創(chuàng)建診斷文件目錄

缺省的情況下,db2diag.log 文件創(chuàng)建在 ~/sqllib/db2dump 目錄下,這個目錄是 NFS-mounted,我們一般建議要將 db2diag.log 文件放在非 NFS-mounted 目錄下。在 E7100 實施中,我們建議將該文件放到外部的存儲上。

Administration BCU:

mkdir -p /db2path/bcuaix/NODE0000/SQL00001/db2dump

Data BCU 1:

mkdir -p /db2path/bcuaix/NODE0001/SQL00001/db2dump

Data BCU 2:

mkdir -p /db2path/bcuaix/NODE0009/SQL00001/db2dump

Administration BCU:

ln -s /db2path/bcuaix/NODE0000/SQL00001/db2dump /db2path/bcuaix/db2dump

Data BCU 1:

ln -s /db2path/bcuaix/NODE0001/SQL00001/db2dump /db2path/bcuaix/db2dump

Data BCU 2:

ln -s /db2path/bcuaix/NODE0009/SQL00001/db2dump /db2path/bcuaix/db2dump

db2 update dbm config using diagpath /db2path/bcuaix/db2dump

定義數(shù)據(jù)庫分區(qū)

在數(shù)據(jù)庫分區(qū)環(huán)境下,數(shù)據(jù)庫被分為多個分區(qū),分區(qū)之間彼此獨立工作,實現(xiàn)并行操作。數(shù)據(jù)庫分區(qū)可以是物理分區(qū)也可以是邏輯分區(qū)。在一臺物理機器上部署的一個分區(qū),我們稱為物理分區(qū),如果是在一臺 SMP 機器上部署多個分區(qū),這些分區(qū)我們稱為邏輯分區(qū)。我們可以選擇物理分區(qū),也可以選擇邏輯分區(qū)。通常,如果決定采用大的 SMP 機器,有更多的 CPU、內(nèi)存及硬盤,我們會采用邏輯分區(qū);如果決定采用多臺物理機器,我們會通過非共享的體系結(jié)構(gòu)采用物理分區(qū);如果決定采用多臺 SMP 機器,我們則會采用物理分區(qū)和邏輯分區(qū)結(jié)合的方式。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,執(zhí)行 CREATE DATABASE 語句所在的分區(qū)稱為編目分區(qū)(catalog partition)。編目分區(qū)保存系統(tǒng)編目表。編目分區(qū)只能創(chuàng)建在一個分區(qū)上。通常,在實際生產(chǎn)環(huán)境中,我們建議采用一個專用編目分區(qū),這個分區(qū)只包含編目表,不包含用戶數(shù)據(jù)。這對 DB2 的一些實用程序運行效率有較大的提高。比如說 BACKUP 和 RESTORE 命令,需要先在編目分區(qū)上運行,之后才能在其他分區(qū)上執(zhí)行。由于編目分區(qū)上沒有用戶數(shù)據(jù),因此它的備份和恢復(fù)就可以很快完成,并且可以最小程度地延遲對其他分區(qū)的(并行)操作的開始。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,應(yīng)用程序連接的分區(qū),我們稱為協(xié)調(diào)分區(qū)(coordinate partition)。它負責(zé)處理用戶的請求,并根據(jù) Partition key 將用戶的請求分解成多個子任務(wù)交由不同分區(qū)并行處理,最后將不同分區(qū)的執(zhí)行結(jié)果經(jīng)過匯總返回給用戶。任何一個數(shù)據(jù)庫分區(qū)都可以是協(xié)調(diào)分區(qū)。在實際生產(chǎn)環(huán)境中,我們建議采用一個或幾個專用協(xié)調(diào)分區(qū)。因為應(yīng)用程序要通過一個或多個協(xié)調(diào)分區(qū)為用戶連接轉(zhuǎn)移大量的數(shù)據(jù)的話,那么就會消耗那些分區(qū)上的大部分 CPU,并降慢了數(shù)據(jù)訪問速度。如果讓分區(qū)什么也不做,只是充當(dāng)協(xié)調(diào)者(coordinator),就不會降低數(shù)據(jù)分區(qū)數(shù)據(jù)訪問速度。

在 InfoSphere Balanced Warehouse E7100 的設(shè)計中,我們在 administration BCU 中,分別為編目分區(qū)和協(xié)調(diào)分區(qū)分配了專用的分區(qū),同時,根據(jù)數(shù)據(jù)庫分區(qū)的基本原則,我們將系統(tǒng)中的小表創(chuàng)建在了一個單一分區(qū)上。用戶的數(shù)據(jù),我們創(chuàng)建在 data BCU 上,同時,根據(jù)數(shù)據(jù)庫分區(qū)的基本原則,我們將系統(tǒng)中的大表盡量地分布到 data BCU 上的所有分區(qū)上。當(dāng)用戶數(shù)據(jù)增加后,我們可以通過增加更多的 data BCU 來實現(xiàn)增量的方式擴展、提供均衡的性能。如下說明:

Database partition 0 (BPU 0) 包含:

Catalog function (only one database partition has the database catalog)

Coordinator function

Single-partition data function

Query Patroller server and control tables (if implemented)

Located on the administration BCU

Database partition 1 - n (BPU1 - BPUn) 包含:

Database partitions with partitioned data

Located on the data BCUs

DB2 節(jié)點配置文件(db2nodes.cfg)

用來定義數(shù)據(jù)庫分區(qū)。在創(chuàng)建分區(qū)數(shù)據(jù)庫之前,一定要先定義 db2nodes.cfg 文件。該文件放置在用戶實例主目錄下。系統(tǒng)中的每一個分區(qū)在該文件中都會有一項。

db2nodes.cfg 文件的基本格式如下:

dbpartitionnum hostname logical-port netnam

其中:

dbpartitionnum

數(shù)據(jù)庫分區(qū)號唯一地定義數(shù)據(jù)庫分區(qū),可在 0 到 999 之間。數(shù)據(jù)庫分區(qū)號必須以升序順序排序。該順序中可以有間隔。一旦指定了數(shù)據(jù)庫分區(qū)號,就不能對其進行更改。否則,分布圖(它指定數(shù)據(jù)分發(fā)方式)中的信息可能不正確。

hostname

用作分區(qū)間通信的 IP 地址的主機名。

logical-port

它指定該數(shù)據(jù)庫分區(qū)的邏輯端口號。此號碼與數(shù)據(jù)庫管理器實例名一起用來標識 etc/services 文件中的 TCP/IP 服務(wù)名稱條目。 對于每個主機名,一個邏輯端口必須為 0(零) 。

netname

指定用于 FCM 高速互聯(lián)的主機名稱 。

下邊是包括一個 administration BCU 和 2 個 data BCU 環(huán)境的 db2nodes.cfg 文件內(nèi)容:

 

0 adminbcu001 0 adminbcu001_fcm

1 databcu001 0 databcu001_fcm

2 databcu001 1 databcu001_fcm

3 databcu001 2 databcu001_fcm

4 databcu001 3 databcu001_fcm

5 databcu001 4 databcu001_fcm

6 databcu001 5 databcu001_fcm

7 databcu001 6 databcu001_fcm

8 databcu001 7 databcu001_fcm

9 databcu002 0 databcu002_fcm

10 databcu002 1 databcu002_fcm

11 databcu002 2 databcu002_fcm

12 databcu002 3 databcu002_fcm

13 databcu002 4 databcu002_fcm

14 databcu002 5 databcu002_fcm

15 databcu002 6 databcu002_fcm

16 databcu002 7 databcu002_fcm

在分區(qū)號的分配上,我們建議,catalog partition 分區(qū)號分配為 0,因為一個實例下只能有 1 個 catalog partition,分區(qū)號 990-999 分配給另外需要增加的 coordinator partitions,分區(qū)號 980-989 分配給另外需要增加的單分區(qū)的表。

配置分區(qū)間通信

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,分區(qū)之間需要通過 DB2 Fast Communication

Manager 進行通信。在 /etc/services 文件中,需要為 DB2 FCM 通信設(shè)置相應(yīng)的通信端口。

xbcuaix 50000/tcp
xbcuaix_int 50001/tcp
DB2_bcuaix 60000/tcp
DB2_bcuaix_END 60016/tcp

創(chuàng)建數(shù)據(jù)庫

我們在 administration BCU 上創(chuàng)建數(shù)據(jù)庫testdb。

db2 "create database testdb automatic storage no on /db2path \
pagesize 16384 autoconfigure apply none"

創(chuàng)建數(shù)據(jù)庫分區(qū)組(database partition groups)

數(shù)據(jù)庫分區(qū)組是一個或多個數(shù)據(jù)庫分區(qū)的集合。在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,數(shù)據(jù)庫表空間創(chuàng)建在數(shù)據(jù)庫分區(qū)組中。

在設(shè)計數(shù)據(jù)庫分區(qū)組時,我們一般建議:

幾乎總要為小的表創(chuàng)建至少一個單分區(qū)的數(shù)據(jù)庫分區(qū)組。

幾乎總要為大的表使用至少一個由所有分區(qū)組成的數(shù)據(jù)庫分區(qū)組。這個數(shù)據(jù)庫分區(qū)組可以是缺省的 IBMDEFAULTGROUP。

分區(qū)數(shù)越多,就越可能存在一些對單分區(qū)來說太大、而要展開到所有分區(qū)上又太小的表,那么就越需要創(chuàng)建包含數(shù)個分區(qū)、但不是全部分區(qū)的數(shù)據(jù)庫分區(qū)組。

當(dāng)我們創(chuàng)建一個數(shù)據(jù)庫后,系統(tǒng)會缺省創(chuàng)建 3 個數(shù)據(jù)庫分區(qū)組:

IBMCATGROUP:編目數(shù)據(jù)庫分區(qū)組,用來存儲系統(tǒng)編目表。它只包含一個數(shù)據(jù)庫分區(qū)。

SYSCATSPACE 表空間創(chuàng)建在這個分區(qū)組中。

在 BCU 設(shè)計中,IBMCATGROUP 創(chuàng)建在 0 號數(shù)據(jù)庫分區(qū)上。

IBMTEMPGROUP.:臨時數(shù)據(jù)庫分區(qū)組,tempspace1 系統(tǒng)臨時表空間創(chuàng)建在這個分區(qū)組中。它包含系統(tǒng)中的所有數(shù)據(jù)庫分區(qū)。

IBMDEFAULTGROUP:缺省數(shù)據(jù)庫分區(qū)組。用戶表空間缺省創(chuàng)建在該分區(qū)組中。USERSPACE1 表空間包含在 IBMDEFAULTGROUP 中。

在BCU設(shè)計中,建議不使用IBMDEFAULTGROUP,而是創(chuàng)建了2個新的數(shù)據(jù)庫分區(qū)組:

PDPG: 分布在data BCU分區(qū)上的數(shù)據(jù)包含在此數(shù)據(jù)庫分區(qū)組中。PDPG 只包括data BCU 上的分區(qū),但不包含administration BCU上的分區(qū)。它適用于中等數(shù)據(jù)規(guī)模到大數(shù)據(jù)規(guī)模的表。

SDPG:該數(shù)據(jù)庫分區(qū)只包含 administration BCU 分區(qū)上的數(shù)據(jù),它只包含一個數(shù)據(jù)庫分區(qū),即 0 號數(shù)據(jù)庫分區(qū)。系統(tǒng)中的一些小表保存在此數(shù)據(jù)庫分區(qū)組中,這些小表通常是一些維表(dimension tables)或 lookup tables。

CREATE DATABASE PARTITION GROUP PDPG ON DBPARTITIONNUMS (1 to 16)
CREATE DATABASE PARTITION GROUP SDPG ON DBPARTITIONNUMS (0)

創(chuàng)建 buffer pools

在本示例中,我們創(chuàng)建 2 個 16K 頁的 buffer pools:

CREATE BUFFERPOOL BP_16K ALL DBPARTITIONNUMS SIZE 53760 PAGESIZE 16K;
CREATE BUFFERPOOL BPTMP_16K ALL DBPARTITIONNUMS SIZE 10752 PAGESIZE 16K;

創(chuàng)建表空間

在本次實例中,我們將創(chuàng)建如下表空間:

db2tmp ---臨時表空間

ts_pd_data_001---分區(qū)表數(shù)據(jù)空間

ts_pd_idx_001---索引表空間

ts_sd_small---單分區(qū)表空間。如圖所示:

圖 5. 表空間創(chuàng)建示例圖:
 

在 data BCU 上創(chuàng)建如下表空間:

CREATE TEMPORARY TABLESPACE db2tmp

IN DATABASE PARTITION GROUP ibmtempgroup

PAGESIZE 16K

MANAGED BY DATABASE

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/db2tmp’ 25G)

ON DBPARTITIONNUMS (0)

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/db2tmp’ 25G,

FILE ’/db2fs2p $N /bcuaix/databasename/db2tmp’ 25G,

FILE ’/db2fs3p $N /bcuaix/databasename/db2tmp’ 25G,

FILE ’/db2fs4p $N /bcuaix/databasename/db2tmp’ 25G)

ON DBPARTITIONNUMS (1 to 16)

EXTENTSIZE 16

PREFETCHSIZE AUTOMATIC

BUFFERPOOL BPTMP_16K

OVERHEAD 5.75 TRANSFERRATE 0.4

AUTORESIZE YES MAXSIZE 400G

NO FILE SYSTEM CACHING;

CREATE TABLESPACE ts_pd_data_001

IN DATABASE PARTITION GROUP pdpg

PAGESIZE 16K

MANAGED BY DATABASE

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/ts_pd_data_001’ 50G,

FILE ’/db2fs2p $N /bcuaix/databasename/ts_pd_data_001’ 50G,

FILE ’/db2fs3p $N /bcuaix/databasename/ts_pd_data_001’ 50G,

FILE ’/db2fs4p $N /bcuaix/databasename/ts_pd_data_001’ 50G)

EXTENTSIZE 16

PREFETCHSIZE AUTOMATIC

BUFFERPOOL BP_16K

OVERHEAD 5.75 TRANSFERRATE 0.4

AUTORESIZE YES MAXSIZE 400G

NO FILE SYSTEM CACHING;

CREATE TABLESPACE ts_pd_idx_001

IN DATABASE PARTITION GROUP pdpg

PAGESIZE 16K

MANAGED BY DATABASE

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,

FILE ’/db2fs2p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,

FILE ’/db2f3p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,

FILE ’/db2fs4p $N /bcuaix/databasename/ts_pd_idx_001’ 25G)

EXTENTSIZE 16

PREFETCHSIZE AUTOMATIC

BUFFERPOOL BP_16K

OVERHEAD 5.75 TRANSFERRATE 0.4

AUTORESIZE YES MAXSIZE 200G

NO FILE SYSTEM CACHING;

在administration BCU上創(chuàng)建如下表空間:

CREATE TABLESPACE ts_sd_small_001 
IN DATABASE PARTITION GROUP sdpg
PAGESIZE 16K
MANAGED BY DATABASE
USING (
FILE ‘/db2fs1p0/bcuaix/databasename/ts_sd_data_001’ 100G)
EXTENTSIZE 16
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BP_16K
OVERHEAD 5.75 TRANSFERRATE 0.4
AUTORESIZE YES MAXSIZE 200G
NO FILE SYSTEM CACHING;

在創(chuàng)建分區(qū)數(shù)據(jù)庫表空間時,我們經(jīng)常會使用數(shù)據(jù)庫分區(qū)表達式。它是由參數(shù) ' $N (注意在 $N 之前有一個空格)來指定的,DB2 會將 $N 替換成數(shù)據(jù)庫分區(qū)組中已定義的分區(qū)號。

創(chuàng)建表

當(dāng)創(chuàng)建數(shù)據(jù)庫分區(qū)組時,每一個數(shù)據(jù)庫分區(qū)組都會對應(yīng)一個分區(qū)圖(partitioning map),它是一個包含 4096 個條目的數(shù)組,每個條目的值對應(yīng)于數(shù)據(jù)庫分區(qū)組中的某一個分區(qū)號。

分區(qū)鍵(partitioning key)是由一個表上的一個列或者多個列組成,用于確定某一行特定數(shù)據(jù)分布在哪個分區(qū)上。分區(qū)鍵是在 CREATE TABLE 語句來定義的。如果沒有指定分區(qū)鍵,缺省的分區(qū)鍵是主鍵的第一列,如果沒有這么一列,則選擇有適合數(shù)據(jù)類型的第一列。

當(dāng)向表中插入一條記錄時,DB2 將該記錄的分區(qū)鍵值散列(hash)到分區(qū)圖中的一個條目上,并根據(jù)該條目找到要使用的分區(qū)號。

在定義分區(qū)表時,分區(qū)鍵的定義對今后性能的影響非常大,因此,在選擇上一定要慎重。通常,在選擇分區(qū)鍵時,要遵從如下原則:

選擇經(jīng)常用于連接的列作為分區(qū)鍵。

分區(qū)鍵應(yīng)該不包括經(jīng)常更新的列。

除非一個表不是很重要,或者不知道一個好的分區(qū)鍵選擇是什么,否則不應(yīng)該隨缺省情況選擇分區(qū)鍵。缺省的分區(qū)鍵是主鍵的第一列,如果沒有這么一列,則選擇有適合數(shù)據(jù)類型的第一列。

將一個表創(chuàng)建為分區(qū)表之后,就不能直接更改它的分區(qū)鍵。

通過 ALTER TABLE 可以添加或刪除分區(qū)鍵,但是這只對未分區(qū)表有效。

那些處于表上定義的惟一性約束或主鍵約束中的列必須是分區(qū)鍵的一個超集(superset)

數(shù)據(jù)類型:LOB 和 LONG 型的列不能作為分區(qū)鍵的一部分

就效率而言,整數(shù)類型的列是最可取的,其次是字符型,然后是小數(shù)。

選擇基數(shù)較大的分區(qū)鍵列,以避免表中的行在各分區(qū)上分布不均衡。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境下,數(shù)據(jù)在不同分區(qū)的分布會影響表的連接策略。分區(qū)數(shù)據(jù)庫環(huán)境下表連接策略主要包括:

并置連接(Collocated joins)--采用該種連接方式,表的連接以本地方式在數(shù)據(jù)所在的數(shù)據(jù)庫分區(qū)上進行,不會在分區(qū)之間傳輸數(shù)據(jù),這是效率最高的表連接方式。在分區(qū)數(shù)據(jù)環(huán)境下,應(yīng)盡量采用該種連接方式。

定向連接(Directed joins)--采用該種連接方式,一個表中的數(shù)據(jù)會按照連接對中的另一個表的分區(qū)鍵值重新分發(fā)到其他分區(qū)上來完成表連接操作。它會在分區(qū)之間移動數(shù)據(jù),對性能會有一定影響。當(dāng)并置連接及未被采用,DB2優(yōu)化器會選擇定向連接方式。

廣播連接( Broadcast joins)--采用該種連接方式,一個表中的所有數(shù)據(jù)會廣播到另外表所在的所有分區(qū)上來完成表連接操作。如果在分區(qū)之間廣播的數(shù)據(jù)量較大,對性能影響也會很大。當(dāng)并置連接及定向表連接未被采用,DB2 優(yōu)化器會選擇廣播連接方式。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境下,應(yīng)盡量采用并置連接方式。要使用并置連接方式,被并置的表必須:

在相同的數(shù)據(jù)庫分區(qū)組內(nèi)

分區(qū)鍵必須有相同數(shù)量的列。

分區(qū)鍵中相應(yīng)的列必須是分區(qū)兼容的。

分區(qū)兼容性是在分區(qū)鍵中相應(yīng)列的基本數(shù)據(jù)類型之間定義的。分區(qū)兼容的(partition-compatible)數(shù)據(jù)類型有一個特性,那就是對于兩種不同類型的兩個變量,假設(shè)變量有相同的值,則它們將通過相同的分區(qū)函數(shù)映射到相同的分區(qū)鍵索引。分區(qū)兼容性有以下特征:

內(nèi)部格式用于 DATE、TIME 和 TIMESTAMP。這些類型彼此不兼容,并且沒有哪一個與 CHAR 或 VARCHAR 兼容。

分區(qū)兼容性不受具有 NOT NULL 或 FOR BIT DATA 定義的列的影響。

對于兼容數(shù)據(jù)類型的 NULL 值是一致處理的。而不兼容數(shù)據(jù)類型的 NULL 值可能產(chǎn)生不同的結(jié)果。

可以使用 UDT 的基本數(shù)據(jù)類型來分析分區(qū)兼容性。

分區(qū)鍵中具有相同值的小數(shù)是一致處理的,即使它們的標度(scale)和精度(precision)不一樣也是如此。

系統(tǒng)提供的散列函數(shù)將忽略字符串(CHAR、VARCHAR、GRAPHIC 或 VARGRAPHIC)的結(jié)尾空白。

不同長度的 CHAR 或 VARCHAR 是兼容的數(shù)據(jù)類型。

相等的 REAL 或 DOUBLE 值,即使它們的精度不同,也將被一致處理。

另外,我們也經(jīng)常使用復(fù)制的具體化查詢表(replicated MQT)來實現(xiàn)并置連接。我們往往會選擇更新不多而又經(jīng)常與大表進行連接的小表或中等大小的表來作為復(fù)制的具體化查詢表。

下面是對復(fù)制表的一個示例定義:

create table t1_rep as (select * from t1) data initially deferred \
refresh deferred in ts_pd_data_001 replicated

下邊的例子,我們在 ts_pd_data_001 表空間上創(chuàng)建一個 LINEITEM 表:

CREATE TABLE "DB2INST1"."LINEITEM" (

"L_ORDERKEY" INTEGER NOT NULL ,

"L_PARTKEY" INTEGER NOT NULL ,

"L_SUPPKEY" INTEGER NOT NULL ,

"L_LINENUMBER" INTEGER NOT NULL ,

"L_QUANTITY" DECIMAL(15,2) NOT NULL ,

"L_EXTENDEDPRICE" DECIMAL(15,2) NOT NULL ,

"L_DISCOUNT" DECIMAL(15,2) NOT NULL ,

"L_TAX" DECIMAL(15,2) NOT NULL ,

"L_RETURNFLAG" CHAR(1) NOT NULL ,

"L_LINESTATUS" CHAR(1) NOT NULL ,

"L_SHIPDATE" DATE NOT NULL ,

"L_COMMITDATE" DATE NOT NULL ,

"L_RECEIPTDATE" DATE NOT NULL ,

"L_SHIPINSTRUCT" CHAR(25) NOT NULL ,

"L_SHIPMODE" CHAR(10) NOT NULL ,

"L_COMMENT" VARCHAR(44) NOT NULL )

DISTRIBUTE BY HASH("L_ORDERKEY")

IN " ts_pd_data_001"

#p#

數(shù)據(jù)庫分區(qū)管理相關(guān)命令

確定編目分區(qū)

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中, ROLLFORWARD DATABASE 等命令需要在編目分區(qū)上執(zhí)行。我們可以通過 LIST DATABASE DIRECTORY 命令來確定編目分區(qū)。

db2 LIST DATABASE DIRECTORY

分區(qū)切換

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,我們可以通過設(shè)置 DB2NODE 環(huán)境變量 或使用 set client 命令進行分區(qū)間的切換。

export DB2NODE=2
db2 terminate
OR
db2 set client connect_dbpartitionnum 2

增加數(shù)據(jù)庫分區(qū)

該命令會自動在 db2nodes.cfg 中增加新定義的分區(qū)信息,并在新的數(shù)據(jù)庫分區(qū)上創(chuàng)建

TEMPSPACE1 表空間。

我們也可以用如下命令增加數(shù)據(jù)庫分區(qū):

export DB2NODE=4
db2 terminate
db2 connect to testdb
db2 ADD DBPARTITIONNUM

使用該命令時,必須事先修改 db2nodes.cfg 文件包含新定義的分區(qū)信息,并在新增加的數(shù)據(jù)庫分區(qū)上執(zhí)行該命令。

刪除數(shù)據(jù)庫分區(qū)

在刪除數(shù)據(jù)庫分區(qū)時,只有那些不包含數(shù)據(jù)的分區(qū)才可以被刪除。因此,在刪除分區(qū)時,必須要先執(zhí)行 DROP PARTITIONNUM VERIFY 命令檢查一下該分區(qū)是否可以被刪除。如果某一個分區(qū)正在被使用,要先執(zhí)行 REDISTRIBUTE DATABASE PARTITION GROUP 命令將該分區(qū)上的數(shù)據(jù)分布到其他分區(qū)上。

export DB2NODE=4
db2 TERMINATE
db2 DROP DBPARTITIONNUM VERIFY
SQL6034W Node "4" is not being used by any databases.
db2stop DROP DBPARTITIONNUM 4

如果數(shù)據(jù)庫分區(qū) 4 上有數(shù)據(jù),則執(zhí)行下述命令:

redistribute database partition group pg123 uniform drop dbpartitionnum (4)
db2 for application all
export DB2NODE=4
db2 drop dbpartitionnum verify
db2stop drop dbpartitionnum 4

查看數(shù)據(jù)庫分區(qū)組

db2 LIST DATABASE PARTITION GROUPS SHOW DETAIL

重新分布數(shù)據(jù)庫分區(qū)組數(shù)據(jù)

db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 UNIFORM"
or
db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 using TARGETMAP pg123.map"

增加數(shù)據(jù)庫分區(qū)到數(shù)據(jù)庫分區(qū)組中

db2 "ALTER DATABASE PARTITION GROUP pg123 ADD DBPARTITIONNUMS (4) WITHOUT TABLESPACES"
db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 UNIFORM"

從數(shù)據(jù)庫分區(qū)組中刪除數(shù)據(jù)庫分區(qū)

db2 drop dbpartitionnum verify
SQL6034W Node "4" is not being used by any databases.
db2stop DROP DBPARTITIONNUM 4

刪除數(shù)據(jù)庫分區(qū)組

db2 "DROP DATABASE PARTITION GROUP pg123"

查看表中的數(shù)據(jù)在各分區(qū)的分布情況

SELECT DBPARTITIONNUM(distribution key), COUNT( * )
FROM schema.table
GROUP BY DBPARTITIONNUM(distribution key)
ORDER BY DBPARTITIONNUM(distribution key)

查看表中的數(shù)據(jù)在分區(qū)圖(partition map)中的分布情況

SELECT HASHEDVALUE(distribution key), COUNT( * )
FROM schema.table
GROUP BY HASHEDVALUE(distribution key)
ORDER BY HASHEDVALUE(distribution key)

DB2 分區(qū)數(shù)據(jù)庫相關(guān)實用程序

db2_all 命令

在 DB2 分區(qū)環(huán)境下,很多操作都需要在各個分區(qū)上分別執(zhí)行,如果每次都要到各個分區(qū)上單獨執(zhí)行,對用戶來說非常繁瑣。在 DB2 中,可以使用 db2_all 命令,它可以在指定的所有數(shù)據(jù)庫分區(qū)服務(wù)器上運行該命令。 

db2_all "db2 UPDATE DB CFG FOR TESTDB USING LOGRETAIN ON"
db2_all ";db2 UPDATE DB CFG FOR TESTDB USING LOGRETAIN ON"
db2_all "db2 CONNECT TO testdb ;db2 LIST TABLESPACES SHOW DETAIL"

rah 命令

它指定在所有計算機上運行該命令。

如果想為多臺物理機器創(chuàng)建一個目錄,那么可以發(fā)出下面的命令

rah ")mkdir /tmp/$USER“

數(shù)據(jù)庫備份

要備份分區(qū)數(shù)據(jù)庫,您必須要首先在編目分區(qū)上調(diào)用備份實用程序,然后在其他數(shù)據(jù)庫分區(qū)上調(diào)用備份實用程序。

db2_all "<<+0< db2 BACKUP DB testdb to /home/db2inst1/BACKUPS"
db2_all "|<<-0< db2 BACKUP DB testdb ONLINE to /home/db2inst1/BACKUPS"

 

其中,“+0”表示只在 0 號分區(qū)上執(zhí)行,“-0”表示在除了 0 號分區(qū)之外的所有分區(qū)上執(zhí)行。

在版本 9.5 之前,您必須一次一個數(shù)據(jù)庫分區(qū)地備份分區(qū)數(shù)據(jù)庫。一次一個數(shù)據(jù)庫分區(qū)地備份多個數(shù)據(jù)庫分區(qū)可能會出錯并且費時。如果一次一個數(shù)據(jù)庫分區(qū)地備份分區(qū)數(shù)據(jù)庫,那么您無法在備份映像中包括復(fù)原和恢復(fù)所需要的日志文件。在版本 9.5 中,您可以通過在 b 編目數(shù)據(jù)庫分區(qū)上執(zhí)行單一系統(tǒng)視圖(SSV)備份同時備份多個數(shù)據(jù)庫分區(qū)。您從編目數(shù)據(jù)庫分區(qū)執(zhí)行備份操作時,可以使用 ON DBPARTITIONNUMS 選項來指定要在備份中包含哪些分區(qū)。它將同時備份指定的分區(qū),并且與指定的分區(qū)相關(guān)聯(lián)的備份時間戳記將相同。此外,您還可以在 SSV 備份中包含數(shù)據(jù)庫日志。

db2 BACKUP DATABASE testdb ON DBPARTITIONNUMS (1, 2) \
TABLESPACE (USERSPACE1) ONLINE USE TSM
Or
db2 backup db testdb on all dbpartitionnums tablespace(T1)

監(jiān)控數(shù)據(jù)庫備份命令執(zhí)行情況

export DB2NODE=0
db2 terminate
db2 LIST UTILITIES SHOW DETAIL

數(shù)據(jù)庫恢復(fù)

要恢復(fù)分區(qū)數(shù)據(jù)庫,您必須要首先在編目分區(qū)上調(diào)用恢復(fù)實用程序,然后在其他數(shù)據(jù)庫分區(qū)上調(diào)用恢復(fù)實用程序。

db2_all "<<+0< db2 RESTORE DATABASE testdb \
FROM /home/db2inst1/BACKUPS INTO testdb REPLACE EXISTING"
db2_all "<<-0< db2 RESTORE DATABASE testdb \
FROM /home/db2inst1/BACKUPS INTO testdb REPLACE EXISTING"

 

前滾恢復(fù)(ROLLFORWARD DATABASE)

在分區(qū)數(shù)據(jù)庫中,ROLLFORWARD DATABASE 命令只能在編目分區(qū)上運行。如果需要前滾恢復(fù)數(shù)據(jù)庫或表空間到某一時間點(point in time ),則該命令會涉及到db2nodes.cfg 文件中定義的所有數(shù)據(jù)庫分區(qū)上的數(shù)據(jù)。如果需要根據(jù)整個事務(wù)日志(to the end of logs)來前滾恢復(fù)數(shù)據(jù)庫或表空間, 則該命令會涉及到所有指定的數(shù)據(jù)庫分區(qū)上的數(shù)據(jù)。如果沒有指定數(shù)據(jù)庫分區(qū),該命令會涉及到db2nodes.cfg 文件中定義的所有數(shù)據(jù)庫分區(qū)上的數(shù)據(jù)。如果某一分區(qū)不需要執(zhí)行前滾恢復(fù),則該分區(qū)會被忽略掉。

當(dāng)數(shù)據(jù)庫處于一致狀態(tài)時(當(dāng)數(shù)據(jù)庫目錄中列示的對象與磁盤中實際存在的對象匹配時),最小恢復(fù)時間是前滾期間的最早時間點。手動確定要將數(shù)據(jù)庫前滾至的正確時間點比較困難,尤其是對于分區(qū)數(shù)據(jù)庫更是如此。在版本 9.5 中,通過在 ROLLFORWARD DATABASE 命令中使用 TO END OF BACKUP 參數(shù),可以將數(shù)據(jù)庫前滾至由數(shù)據(jù)庫管理器確定的最小恢復(fù)時間。

前滾恢復(fù)分區(qū) 0 及分區(qū) 2 上的表空間TBS1: 

db2 rollforward db testdb to end of logs on dbpartitionnums (0, 2) tablespace(TBS1)

前滾恢復(fù)分區(qū) 6 上的 6 個小表:

db2 rollforward database testdb to end of logs on dbpartitionnum (6) \
tablespace(tsstore, tssbuyer, tsstime, tsswhse, tsslscat, tssvendor)

前滾至由數(shù)據(jù)庫管理器確定的最小恢復(fù)時間:

db2 rollforward db testdb to end of backup and complete

EXPORT 命令

export 用于將表中的數(shù)據(jù)卸載到文件中。

db2 "EXPORT TO lineitem.del OF DEL SELECT * FROM db2inst1.lineitem"

在分區(qū)數(shù)據(jù)庫環(huán)境下,import 或 LOAD 命令不支持 IFX 文件格式。

IMPORT 命令

用于將外部文件中的數(shù)據(jù)插入到表中。

db2 "IMPORT FROM lineitem.tbl OF DEL MODIFIED BY COLDEL| \
COMMITCOUNT 100000 REPLACE INTO lineitem"

LOAD 命令

在多分區(qū)數(shù)據(jù)庫環(huán)境中,大量的數(shù)據(jù)放在多個數(shù)據(jù)庫分區(qū)中。分區(qū)鍵用來確定每部分數(shù)據(jù)所在的數(shù)據(jù)庫分區(qū)。必須先分布數(shù)據(jù),然后才能將該數(shù)據(jù)裝入到正確的數(shù)據(jù)庫分區(qū)中。

在多分區(qū)數(shù)據(jù)庫中裝入表時,load 實用程序可以:

并行地分布輸入數(shù)據(jù)

同時在各個相應(yīng)數(shù)據(jù)庫分區(qū)中裝入數(shù)據(jù)

將數(shù)據(jù)裝入到多分區(qū)數(shù)據(jù)庫中分兩階段完成:第一階段為設(shè)置階段,在此階段獲取數(shù)據(jù)庫分區(qū)資源(如表鎖定);第二階段為裝入階段,在此階段將數(shù)據(jù)裝入到數(shù)據(jù)庫分區(qū)中。在將數(shù)據(jù)裝入多分區(qū)數(shù)據(jù)庫時,可以使用下列其中一種方式:

PARTITION_AND_LOAD

對數(shù)據(jù)進行分布(有可能以并行方式進行分布),并且同時在各個相應(yīng)數(shù)據(jù)庫分區(qū)上裝入數(shù)據(jù)。

PARTITION_ONLY

對數(shù)據(jù)進行分布(有可能以并行方式進行分布),并將輸出寫入每個裝入數(shù)據(jù)庫分區(qū)上指定位置中的文件。每個文件都包含分區(qū)頭,該分區(qū)頭指定數(shù)據(jù)在數(shù)據(jù)庫分區(qū)上的分布方式,并指定可以使用 LOAD_ONLY 方式將該文件裝入到數(shù)據(jù)庫中。

LOAD_ONLY

假定數(shù)據(jù)已分布在數(shù)據(jù)庫分區(qū)上;將跳過分布過程,并且在相應(yīng)的數(shù)據(jù)庫分區(qū)上同時裝入數(shù)據(jù)。

ANALYZE

生成最佳分布圖(在所有數(shù)據(jù)庫分區(qū)之間均勻地分布數(shù)據(jù))。

下邊是 LOAD 命令的一些示例:

要將 load.del 中的數(shù)據(jù)裝入到所有定義了 TABLE1 的數(shù)據(jù)庫分區(qū)中,請發(fā)出以下命令: 

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1

要在數(shù)據(jù)分布在數(shù)據(jù)庫分區(qū) 3 和數(shù)據(jù)庫分區(qū) 4 上的位置執(zhí)行裝入操作,請發(fā)出以下命令:

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1 PARTITIONED DB \
CONFIG PARTITIONING_DBPARTNUMS (3,4)

在使用數(shù)據(jù)庫分區(qū) 3 和數(shù)據(jù)庫分區(qū) 4 的情況下,要將 load.del 分布(而不裝入)到所有定義 TABLE1 的數(shù)據(jù)庫分區(qū)中,請發(fā)出以下命令:

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1 PARTITIONED DB
  CONFIG MODE PARTITION_ONLY
  PART_FILE_LOCATION /db2/data PARTITIONING_DBPARTNUMS (3,4)

如果已經(jīng)以 PARTITION_ONLY 方式執(zhí)行了裝入操作,并且要將每個裝入數(shù)據(jù)庫分區(qū)的 /db2/data 目錄中的分區(qū)文件裝入到所有定義了 TABLE1 的數(shù)據(jù)庫分區(qū)中,請發(fā)出以下命令:

LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1 PARTITIONED
  DB CONFIG MODE LOAD_ONLY
  PART_FILE_LOCATION /db2/data

要僅裝入到數(shù)據(jù)庫分區(qū) 4 中,請發(fā)出以下命令:

LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1 PARTITIONED
DB CONFIG MODE LOAD_ONLY
PART_FILE_LOCATION /db2/data OUTPUT_DBPARTNUMS (4)

REORG 命令

在分區(qū)數(shù)據(jù)庫中,同樣使用DB2 REORG 命令重組表及索引。

db2 "REORG INDEXES ALL FOR TABLE lineitem ALLOW WRITE ACCESS"
  db2 "REORG TABLE lineitem INPLACE ALLOW WRITE ACCESS ON ALL DBPARTITIONNUMS"

RUNSTATS 命令

在分區(qū)數(shù)據(jù)庫中,同樣使用RUNSTATS命令收集統(tǒng)計信息。

db2 "RUNSTATS ON TABLE db2inst1.lineitem WITH DISTRIBUTION AND \
  DETAILED INDEXES ALL ALLOW WRITE ACCESS"

在分區(qū)數(shù)據(jù)庫中,RUNSTATS 命令運行時所在分區(qū)的統(tǒng)計信息才會被收集,再對這些統(tǒng)計信息加以推斷(前提是行在各分區(qū)上是均勻分布的)以反映整個數(shù)據(jù)庫。這意味著,SYSCAT.TABLES 中的 CARD 列可能不包含該表中確切的行數(shù)。我們要盡量讓數(shù)據(jù)均勻地分布在各分區(qū)上。

結(jié)論

本文以 Balanced Warehouse E7100 為例,為大家介紹了數(shù)據(jù)庫分區(qū)設(shè)計、實現(xiàn)及管理的基本方法。希望大家能夠?qū)?DB2 數(shù)據(jù)庫分區(qū)技術(shù)及使用有一個比較全面的了解。另外,關(guān)于數(shù)據(jù)庫分區(qū)監(jiān)控及性能調(diào)優(yōu)等方面內(nèi)容,大家可以參考 DB2 信息中心相關(guān)內(nèi)容。

db2start DBPARTITIONNUM 4 ADD DBPARTITIONNUM HOSTNAME Clyde PORT 4

【編輯推薦】

  1. DB2 Version 9.5 pureXML的增強和新特性
  2. DB2 9存儲過程的規(guī)劃和實施技巧
  3. DB2數(shù)據(jù)庫性能優(yōu)化技巧詳解
責(zé)任編輯:book05 來源: it158
相關(guān)推薦

2010-08-19 16:47:14

DB2 9.5分區(qū)管理

2010-08-26 16:15:25

DB2數(shù)據(jù)庫管理

2010-08-13 15:42:22

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

2010-08-20 13:17:50

DB2數(shù)據(jù)庫分區(qū)管理

2010-08-03 14:40:05

DB2數(shù)據(jù)庫

2010-08-06 09:39:27

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

2010-08-26 10:37:40

DB2Q復(fù)制

2011-03-25 15:39:47

DB2 9數(shù)據(jù)庫

2010-11-02 10:35:59

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

2010-08-05 16:08:12

輕松掌握DB2 9.5

2011-06-20 06:22:18

ibmdwDB2

2010-08-05 09:03:27

DB2 9.5高可用性

2010-11-01 11:30:41

DB2數(shù)據(jù)庫權(quán)限

2010-09-30 11:49:21

DB2數(shù)據(jù)庫權(quán)限

2010-11-03 16:21:18

DB2數(shù)據(jù)庫授權(quán)

2010-09-01 10:55:24

db2管理

2010-08-04 13:37:43

2010-08-25 10:50:48

DB2數(shù)據(jù)庫

2011-03-11 16:02:03

DB2數(shù)據(jù)庫安裝

2010-08-05 16:19:06

DB2建立數(shù)據(jù)庫分區(qū)
點贊
收藏

51CTO技術(shù)棧公眾號