DB2 9.5 數(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 |
在創(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 |
增加數(shù)據(jù)庫分區(qū)
該命令會自動在 db2nodes.cfg 中增加新定義的分區(qū)信息,并在新的數(shù)據(jù)庫分區(qū)上創(chuàng)建
TEMPSPACE1 表空間。
我們也可以用如下命令增加數(shù)據(jù)庫分區(qū):
export DB2NODE=4 |
使用該命令時,必須事先修改 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 |
如果數(shù)據(jù)庫分區(qū) 4 上有數(shù)據(jù),則執(zhí)行下述命令:
redistribute database partition group pg123 uniform 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" |
增加數(shù)據(jù)庫分區(qū)到數(shù)據(jù)庫分區(qū)組中
db2 "ALTER DATABASE PARTITION GROUP pg123 ADD DBPARTITIONNUMS (4) WITHOUT TABLESPACES" |
從數(shù)據(jù)庫分區(qū)組中刪除數(shù)據(jù)庫分區(qū)
db2 drop dbpartitionnum verify |
刪除數(shù)據(jù)庫分區(qū)組
db2 "DROP DATABASE PARTITION GROUP pg123" |
查看表中的數(shù)據(jù)在各分區(qū)的分布情況
SELECT DBPARTITIONNUM(distribution key), COUNT( * ) |
查看表中的數(shù)據(jù)在分區(qū)圖(partition map)中的分布情況
SELECT HASHEDVALUE(distribution key), COUNT( * ) |
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" |
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" |
其中,“+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) \ |
監(jiān)控數(shù)據(jù)庫備份命令執(zhí)行情況
export DB2NODE=0 |
數(shù)據(jù)庫恢復(fù)
要恢復(fù)分區(qū)數(shù)據(jù)庫,您必須要首先在編目分區(qū)上調(diào)用恢復(fù)實用程序,然后在其他數(shù)據(jù)庫分區(qū)上調(diào)用恢復(fù)實用程序。
db2_all "<<+0< db2 RESTORE DATABASE testdb \ |
前滾恢復(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) \ |
前滾至由數(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| \ |
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 \ |
在使用數(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 |
如果已經(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 |
要僅裝入到數(shù)據(jù)庫分區(qū) 4 中,請發(fā)出以下命令:
LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1 PARTITIONED |
REORG 命令
在分區(qū)數(shù)據(jù)庫中,同樣使用DB2 REORG 命令重組表及索引。
db2 "REORG INDEXES ALL FOR TABLE lineitem ALLOW WRITE ACCESS" |
RUNSTATS 命令
在分區(qū)數(shù)據(jù)庫中,同樣使用RUNSTATS命令收集統(tǒng)計信息。
db2 "RUNSTATS ON TABLE db2inst1.lineitem WITH DISTRIBUTION AND \ |
在分區(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 |
【編輯推薦】