乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在 Linux 上利用數(shù)據(jù)分區(qū)功能提高可伸縮性和性能

       hx99 2006-09-04


      本文首先考察了 DB2 UDB for Linux?、UNIX? 和 Windows? 中的 IBM DB2? Universal Database? 數(shù)據(jù)分區(qū)功能(Data Partitioning Feature,DPF)在性能和可伸縮性方面的優(yōu)點(diǎn)。然后,完成在 SUSE Linux Enterprise Server 上安裝和配置具有 DPF 功能的 DB2 的步驟。您還將學(xué)習(xí)到一些重要的概念和設(shè)計(jì)方面的考慮,這些將幫助您快速掌握 SUSE Linux Enterprise 環(huán)境中 DPF 的安裝。

      簡(jiǎn)介

      當(dāng)一個(gè)數(shù)據(jù)庫(kù)由兩個(gè)或更多數(shù)據(jù)庫(kù)分區(qū)組成,并且每個(gè)數(shù)據(jù)庫(kù)分區(qū)存儲(chǔ)位于其中的每個(gè)表的一部分表數(shù)據(jù)時(shí),就屬于數(shù)據(jù)庫(kù)分區(qū)的情況。不同分區(qū)可以在不同計(jì)算機(jī)上,也可以在相同的計(jì)算機(jī)上(即邏輯分區(qū))。在這種類型的數(shù)據(jù)庫(kù)中,數(shù)據(jù)被根據(jù)存儲(chǔ)位置進(jìn)行散列,以標(biāo)識(shí)哪個(gè)數(shù)據(jù)庫(kù)分區(qū)將存儲(chǔ)數(shù)據(jù)。一個(gè)數(shù)據(jù)庫(kù)分區(qū)由它自己的數(shù)據(jù)、索引、配置文件和事務(wù)邏輯組成。在更舊版本的 DB2 中,數(shù)據(jù)庫(kù)分區(qū)被稱作節(jié)點(diǎn)(node)或數(shù)據(jù)庫(kù)節(jié)點(diǎn)。但是在本文中我們使用術(shù)語(yǔ)分區(qū)(partition)。邏輯分區(qū)共享它們所在的同一臺(tái)計(jì)算機(jī)上的資源。

      在分區(qū)數(shù)據(jù)庫(kù)中,一個(gè)表可以分布在一個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)中。分區(qū)背后的思想就是將一個(gè)表的數(shù)據(jù)分布在多個(gè)分區(qū)中,將該表中的一部分行存儲(chǔ)在一個(gè)分區(qū)中,而將其他行存儲(chǔ)在其他分區(qū)中。數(shù)據(jù)庫(kù)管理器(DBM)通過(guò)自動(dòng)地將 SQL 請(qǐng)求分解成子請(qǐng)求,來(lái)處理數(shù)據(jù)的檢索和更新。然后,這些子請(qǐng)求就在相應(yīng)的數(shù)據(jù)庫(kù)分區(qū)中并行地執(zhí)行。將表劃分到多個(gè)分區(qū)的這種行為對(duì)于用戶來(lái)說(shuō)是透明的,這意味著雖然數(shù)據(jù)在物理上是存儲(chǔ)在多個(gè)數(shù)據(jù)庫(kù)分區(qū)上的,但是訪問(wèn)起來(lái)就像是在一個(gè)地方一樣。

      圖 1 展示了運(yùn)行在一臺(tái)機(jī)器上的單個(gè)分區(qū),這類似于沒(méi)有使用 DPF:


      圖 1. 單個(gè)機(jī)器上的單個(gè)分區(qū)
      單個(gè)機(jī)器上的單個(gè)分區(qū)

      接下來(lái)的兩個(gè)圖展示了 DPF 真正起作用的情況。圖 2 說(shuō)明了 DPF 被用于三臺(tái)機(jī)器上的情況,其中每臺(tái)機(jī)器上有一個(gè)分區(qū)。


      圖 2. 每臺(tái)機(jī)器上一個(gè)分區(qū),使用高速通信
      每臺(tái)機(jī)器上一個(gè)分區(qū),使用高速通信

      注意這里使用的高速通信互連,這可以是各機(jī)器之間使用的一個(gè) TCPIP 網(wǎng)絡(luò)。接下來(lái)的 圖 3 展示了同一臺(tái)機(jī)器上的三個(gè)分區(qū)。這里,分區(qū)間的通信是在內(nèi)存中實(shí)現(xiàn)的,而不是通過(guò)一個(gè)網(wǎng)絡(luò)(在所有 Linux 平臺(tái)上,默認(rèn)情況下 DB2 _FORCE_FCM_BP 是啟用的)。


      圖 3. 同一臺(tái)機(jī)器上的三個(gè)分區(qū),通過(guò)內(nèi)存進(jìn)行通信
      同一臺(tái)機(jī)器上的三個(gè)分區(qū),通過(guò)內(nèi)存進(jìn)行通信

      特別要注意,在前面幾個(gè)圖中,對(duì)稱多處理器(SMP)也可以換成單處理器。但是,在 DPF 環(huán)境中 SMP 服務(wù)器更為常見(jiàn)。

      分區(qū)鍵 由表中的一列或多列組成,用于使用戶可以選擇如何對(duì)他們的數(shù)據(jù)進(jìn)行分區(qū)。用戶可以通過(guò)使用數(shù)據(jù)庫(kù)分區(qū)組和表空間,來(lái)確定將表數(shù)據(jù)分布到哪些數(shù)據(jù)庫(kù)分區(qū)上。

      用戶交互通過(guò)一個(gè)數(shù)據(jù)庫(kù)分區(qū),即用于該用戶的協(xié)調(diào)分區(qū)(coordinator partition)來(lái)進(jìn)行。協(xié)調(diào)分區(qū)與應(yīng)用程序運(yùn)行在同一個(gè)數(shù)據(jù)庫(kù)分區(qū)上,或者,對(duì)于遠(yuǎn)程應(yīng)用程序,協(xié)調(diào)分區(qū)運(yùn)行在應(yīng)用程序所連接的那個(gè)數(shù)據(jù)庫(kù)分區(qū)上。任何數(shù)據(jù)庫(kù)分區(qū)都可以成為協(xié)調(diào)分區(qū)。





      回頁(yè)首


      理解 DB2 Data Partitioning Feature (DPF)

      要對(duì)一個(gè)數(shù)據(jù)庫(kù)進(jìn)行分區(qū),需要 DB2 的 Database Partitioning Feature (DPF) 功能。這種可選的 Database Partition Feature 許可只對(duì) DB2 Enterprise Server Edition (ESE) 可用,其費(fèi)用按照分區(qū)數(shù)據(jù)庫(kù)中所使用的 CPU 的數(shù)量來(lái)計(jì)算。





      回頁(yè)首


      何時(shí)分區(qū),為何分區(qū)

      具有 DPF 功能的 DB2 UDB ESE 是管理 OLAP、數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)挖掘工作負(fù)載的理想選擇。對(duì)于大型 OLTP 工作負(fù)載,它也是很好的選擇。最常見(jiàn)的分區(qū)環(huán)境由每個(gè)物理系統(tǒng)上的一個(gè)數(shù)據(jù)庫(kù)分區(qū)組成,這些物理系統(tǒng)組成數(shù)據(jù)庫(kù)分區(qū)集群。每個(gè)數(shù)據(jù)庫(kù)分區(qū)上的數(shù)據(jù)庫(kù)管理器使用每個(gè)系統(tǒng)上的處理器來(lái)管理數(shù)據(jù)庫(kù)中屬于該分區(qū)的那部分?jǐn)?shù)據(jù)。

      由于數(shù)據(jù)被劃分在多個(gè)數(shù)據(jù)庫(kù)分區(qū)上,因而可以使用多臺(tái)計(jì)算機(jī)上的多個(gè)處理器的處理能力來(lái)滿足對(duì)信息的請(qǐng)求。數(shù)據(jù)檢索和更新請(qǐng)求被自動(dòng)分解成一些子請(qǐng)求,然后這些子請(qǐng)求在相應(yīng)的數(shù)據(jù)庫(kù)分區(qū)中并行地執(zhí)行。每多一個(gè)服務(wù)器,就意味著將有更多的 CPU、內(nèi)存和更多的磁盤用于分區(qū)數(shù)據(jù)庫(kù)。

      性能的提升源于這樣的事實(shí):大量的數(shù)據(jù)被劃分成更小的、更易管理的塊,每個(gè)分區(qū)/系統(tǒng)可以同時(shí)運(yùn)行。如果要處理提取、轉(zhuǎn)換和載入操作(ETL),而批處理窗口又比較小,那么可以考慮使用 DPF。例如,DB2 LOAD 可以在每個(gè)分區(qū)上同時(shí)運(yùn)行,負(fù)載操作可以并行地分?jǐn)偟蕉鄠€(gè)服務(wù)器上。創(chuàng)建索引的性能也將顯著提升。而且,通過(guò)使用 DPF,可以顯著縮短備份和恢復(fù)時(shí)間,因?yàn)槊颗_(tái)參與分區(qū)的機(jī)器需要處理的數(shù)據(jù)量更小了。





      回頁(yè)首


      在 SUSE Linux Enterprise Server V9 上安裝 DB2 V8.2

      下面我們來(lái)介紹在 SUSE Server(或多服務(wù)器)環(huán)境中安裝和運(yùn)行 DB2 DPF 所需的步驟。

      步驟 1. 檢驗(yàn)其他軟件包

      DB2 要求在 Linux 系統(tǒng)上安裝以下包:

      • Public domain korn shell (pdksh)
      • Remote shell (rsh) 或 open source secure shell (OpenSSH)
      • IBM Java? 2 Java Run Time
      • Network File Server (nfs)

      使用 rpm 命令來(lái)檢驗(yàn)這些包是否已安裝:

      • rpm -qa | grep pdksh
      • rpm -qa | grep rsh rpm -qa | grep openssh
      • rpm -qa | grep IBMjava
      • rpm -qa | grep nfs

      步驟 2. 檢驗(yàn)內(nèi)核參數(shù)

      在安裝 Linux 之前,請(qǐng)確認(rèn)目前所推薦的、適合 DB2 的 Linux 版本。鏈接 “http://www.ibm.com/software/data/db2/linux/validate/” 顯示了受支持的 Linux 發(fā)行版。確保安裝受推薦、受支持版本的 Linux。

      在安裝 DB2 時(shí),需要注意一些內(nèi)核參數(shù):


      表 1. 對(duì) DB2 有影響的內(nèi)核參數(shù)
      內(nèi)核參數(shù) 描述
      kernel.shmmax 定義系統(tǒng)范圍內(nèi)允許的最大共享內(nèi)存段大小,單位為字節(jié)
      kernel.msgmni 定義在任何時(shí)刻系統(tǒng)上允許的最多消息隊(duì)列標(biāo)識(shí)符個(gè)數(shù)
      fs.file-max 定義 Linux 內(nèi)核最多分配的文件句柄個(gè)數(shù)
      kernel.sem 定義信號(hào)量限制:
      • 每個(gè)數(shù)組的最多信號(hào)量個(gè)數(shù)(semmsl)
      • 系統(tǒng)范圍內(nèi)最多允許的信號(hào)量個(gè)數(shù)(semmns)
      • 每次 semop 調(diào)用的最大操作數(shù)(semopm)
      • 最多允許的數(shù)組個(gè)數(shù)(semmni)
      ** 信號(hào)量提供了進(jìn)程間的低級(jí)同步,使得只有一個(gè)進(jìn)程可以訪問(wèn)共享段,從而確保共享段的完整性。

      在 Kernel 2.4.18 及以后版本中,file-max 參數(shù)的默認(rèn)值是 8192,因此可能不需要修改它??梢允褂靡韵旅顏?lái)檢查 file-max 值:

      cat /proc/sys/fs/file-max

      使用 lpcs 命令顯示當(dāng)前的 Linux 內(nèi)核設(shè)置:

      lpcs -l

      從 DB2 UDB Version 8.2 以后,DB2 在啟動(dòng)時(shí)將檢查 semmni、msgmni 和 shmmax 參數(shù)的值,如果當(dāng)前值不是最佳的,則更新之。DB2 自動(dòng)將內(nèi)核參數(shù)設(shè)置如下:

      • semmni 被改為 1024。
      • msgmni 被改為 1024。
      • shmmax 被改為 268435456 (32-位) 或 1073741824 (64-位)。

      注意,系統(tǒng)范圍內(nèi)最多信號(hào)量個(gè)數(shù)(semmns)等于:

      數(shù)組的最多個(gè)數(shù) (semmni) * 每個(gè)數(shù)組的最多信號(hào)量個(gè)數(shù) (semmsl)

      在安裝 DB2 后,還可以通過(guò) db2pd 命令檢驗(yàn) semni、msgmni、shmmax 參數(shù):

      db2pd -osinfo

      在性能調(diào)優(yōu)時(shí),可能還需要調(diào)整其他內(nèi)核參數(shù)。手冊(cè)上的規(guī)程如下:

      1. 以具有 root 權(quán)限的用戶登錄。
      2. 創(chuàng)建一個(gè) /etc/sysctl.conf 文件,如果還沒(méi)有該文件的話。
      3. 在 /etc/sysctl.conf 文件中添加內(nèi)核條目。
      4. 運(yùn)行 sysctl -p 從默認(rèn)文件 /etc/sysctl.conf 裝載 sysctl 設(shè)置。
      5. 添加 sysctl -p 到一個(gè)系統(tǒng)初始化文件中,以便在每次重新啟動(dòng)時(shí)設(shè)置內(nèi)核參數(shù)。

      步驟 3. 檢驗(yàn)網(wǎng)絡(luò)

      文件 /etc/hosts 包含指定給主機(jī)名的地址(包括一個(gè) IP 地址、全限定主機(jī)名和主機(jī)名)。為了得到最佳性能,應(yīng)確保所有參與的服務(wù)器在 /etc/hosts 文件中都有定義。

      步驟 4. 啟用遠(yuǎn)程 shell 實(shí)用程序

      對(duì)于數(shù)據(jù)分區(qū)環(huán)境,DB2 需要一個(gè)遠(yuǎn)程 shell 實(shí)用程序來(lái)在遠(yuǎn)程分區(qū)上執(zhí)行命令。在 DB2 UDB V8.2.2 之前,rsh 實(shí)用程序被默認(rèn)用作遠(yuǎn)程 shell 機(jī)制,用于分區(qū)之間的通信。為了強(qiáng)認(rèn)證和安全網(wǎng)絡(luò)通信的需要,DB2 UDB V8.2.2 現(xiàn)在允許在一個(gè)名為 DB2RSHCMD 的注冊(cè)表 profile 變量中指定遠(yuǎn)程 shell 實(shí)用程序的完整路徑,從而增加了對(duì)備用遠(yuǎn)程 shell 實(shí)用程序的支持。

      OpenSSH (Open Source Secure Shell) 用于代替 rsh 實(shí)用程序,以便在不安全的通道上提供有安全保障的通信。OpenSSH 支持兩種類型的加密,即基于主機(jī)的認(rèn)證和公鑰認(rèn)證。關(guān)于在 DB2 中使用 OpenSSH 的詳細(xì)信息,請(qǐng)參考標(biāo)題為 “配置 DB2 Universal Database for UNIX 以使用 OpenSSH” 的技術(shù)文章,這篇文章解釋了如何在 DB2 中啟用 OpenSSH。

      為支持一個(gè)受安全保障的環(huán)境,在數(shù)據(jù)庫(kù)分區(qū)環(huán)境中,應(yīng)該使用 OpenSSH,而不是 rsh。如果選擇啟用 rsh 服務(wù),那么只需去掉 /etc/inetd.conf 文件中與 in.rshd 服務(wù)對(duì)應(yīng)的 "#" 字符。為了重新啟動(dòng) inetd 服務(wù)器,可以輸入:

      /etc/init.d/inetd restart

      步驟 5. 設(shè)置 Network File System (NFS)

      對(duì)于一個(gè)數(shù)據(jù)分區(qū)配置,必須有一個(gè)可供所有參與分區(qū)數(shù)據(jù)庫(kù)系統(tǒng)的機(jī)器使用的文件系統(tǒng)。這個(gè)文件系統(tǒng)將用于 DB2 實(shí)例的 home 目錄。容納 DB2 實(shí)例的機(jī)器稱作 instance-owning 機(jī)器。為了共享該文件系統(tǒng),必須配置 Network File System。對(duì)于 Linux,可以通過(guò)發(fā)出以下命令來(lái)檢驗(yàn) NFS 服務(wù)器是否正在運(yùn)行:

      showmount -e hostname

      該命令顯示在一個(gè) NFS 服務(wù)器中定義的文件系統(tǒng)的一個(gè)列表。如果 NFS 不在運(yùn)行,那么將收到以下消息:

      showmount: hostname: RPC: Program not registered

      可以通過(guò)選擇 MiscInstallation Server 來(lái)使用 YaST 配置 NFS。注意,應(yīng)該以 root ID 登錄。


      圖 4. YaST Installation Server:選擇服務(wù)器類型
      YaST Installation Server:選擇服務(wù)器類型

      在 instance-owning 機(jī)器上設(shè)置 NFS 服務(wù)器

      您需要導(dǎo)出 instance-owner 目錄,該目錄將被其他數(shù)據(jù)庫(kù)分區(qū)服務(wù)器共享。

      1. 創(chuàng)建 instance-owner 目錄,確保該目錄被掛載。使用如下命令:
        • mkdir /db2home
        • mount /db2home
      2. 修改 /etc/fstab 中的文件系統(tǒng)表(fstab),使之包括新的文件系統(tǒng),以便在啟動(dòng)時(shí)掛載新的文件系統(tǒng)。條目格式如下:

        <device> <mountpoint> <filesystemtype> <options> <dump> <fsckorder>

        您的條目看上去可能類似于:


        清單 1. 示例 instance-owning /etc/fstab 清單
        
                                                
                                                /dev/had7 /db2home ext3 defaults 1 2

        該條目使用一個(gè) ext3 文件系統(tǒng),這種文件系統(tǒng)在 2.4.16 版或更高版本的 Linux 內(nèi)核中均受支持,文件系統(tǒng)檢查(fsck)程序的順序被設(shè)為 2。

      3. 設(shè)置好 instance-owning 文件系統(tǒng)后,通過(guò)在 /etc/exports 文件中添加以下條目,可以在啟動(dòng)時(shí)通過(guò)一個(gè) NFS 服務(wù)導(dǎo)出這個(gè)文件系統(tǒng):


        清單 2. 示例 /etc/exports 清單
        
                                                
                                                db2home InstanceOwnerServer (rw,sync,no_root_squash) db1(rw,sync,no_root_squash)

        其中 InstanceOwnerServer 是 instance-owner 服務(wù)器的名稱,db1 是另一個(gè)數(shù)據(jù)庫(kù)服務(wù)器的名稱。

        表 2 中列出了導(dǎo)出文件選項(xiàng):

        表 2. 導(dǎo)出文件選項(xiàng)
        選項(xiàng) 描述
        rw 使用讀寫權(quán)限來(lái)導(dǎo)出文件系統(tǒng)
        sync 服務(wù)器必須等文件被寫入到磁盤后才能開始下一次讀操作
        no_root_squash 使 root 權(quán)限有效

      4. 執(zhí)行 exportfs 命令,使將掛載的 NFS 客戶機(jī)能使用 instance-owner 目錄

        /usr/sbin/exportfs -a

        其中選項(xiàng) a 用于導(dǎo)出 /etc/exports 文件中列出的所有目錄。

      設(shè)置參與機(jī)器上的 NFS 客戶機(jī)

      instance-owner 目錄可用之后,便可以將該目錄導(dǎo)入其他數(shù)據(jù)庫(kù)分區(qū)服務(wù)器。

      1. 用以下命令在其他服務(wù)器中創(chuàng)建共享目錄:

        mkdir /db2home

      2. 添加一個(gè)條目到 /etc/fstab 文件,使 NFS 在啟動(dòng)時(shí)自動(dòng)掛載文件系統(tǒng):


        清單 3. 參與機(jī)器的 /etc/fstab 示例
        
                                                
                                                server1:/db2home /db2home nfs rw,timeo=300,retrans=5,hard,intr,bg,suid

        其中 server1 是 instance-owner 服務(wù)器名稱,下表列出了其他一些選項(xiàng):

        表 3. NFS 掛載選項(xiàng)
        選項(xiàng) 描述
        rw 使用讀寫權(quán)限來(lái)導(dǎo)出文件系統(tǒng)。
        timeo 這個(gè)值的單位是十分之一秒,表示 RPC 超時(shí)后進(jìn)行第一次重傳之前所需等待的時(shí)間。默認(rèn)值是7/10。
        retrans 在重大操作被中止或者控制臺(tái)上顯示 “server not responding” 消息之前必須重傳的次數(shù)。
        hard 如果 NFS 文件操作超時(shí)較多,則在控制臺(tái)上報(bào)告 “server not responding”,并一直重新嘗試。這是默認(rèn)情況。
        intr 如果 NFS 文件操作超時(shí)較多,并且是硬(hard)掛載,那么允許由信號(hào)中斷文件操作,使操作中斷。
        bg 如果第一次 NFS 掛載嘗試超時(shí),則在后臺(tái)重試掛載。
        suid 這個(gè)值允許 set-user-identifier 位 (SUID) 或 set group-identifier 位 (SGID) 生效。

      3. 用以下命令在其他數(shù)據(jù)庫(kù)分區(qū)服務(wù)器上掛載導(dǎo)出的文件系統(tǒng):

        mount server1:/db2home /db2home

      檢驗(yàn) NFS 鎖監(jiān)控程序

      DB2 需要一個(gè) NFS 鎖監(jiān)控程序來(lái)在集群中所有參與機(jī)器之間共享 instance-owner 目錄??梢酝ㄟ^(guò)使用 chkconfig 命令來(lái)檢驗(yàn) NFS 鎖監(jiān)控程序是否已啟用:

      chkconfig nfslock

      可以通過(guò)以下命令啟用 NFS 鎖監(jiān)控程序和重新啟動(dòng) nfslock:

      • chkconfig nfslock on
      • /etc/rc.d/nfslock restart

      檢驗(yàn) NFS 鎖和 NSM (Network Status Monitor) 服務(wù)

      NSM 服務(wù) rpc.statd 實(shí)現(xiàn)了一個(gè)重啟通知服務(wù),NFS 文件鎖服務(wù)(rpc.lockd)將用到這個(gè)服務(wù)??梢允褂靡韵旅顧z驗(yàn)這些服務(wù)的狀態(tài):

      • ps -ef | grep rpc.statd
      • ps -ef| grep rps.lockd

      步驟 6. 創(chuàng)建所需的組和用戶

      在數(shù)據(jù)庫(kù)分區(qū)環(huán)境中,需要為 DB2 創(chuàng)建三個(gè)組和用戶 ID,如下表所示:


      表 4. 所需的 DB2 組和用戶
      用戶 ID 組 ID 描述
      db2inst1 db2iadm1 DB2 實(shí)例用戶 ID 和組 ID
      db2fenc1 db2fadm1 DB2 fenced 用戶 ID 和組 ID
      dasusr1 dasadm1 DB2 Administration Server 用戶 ID 和組 ID

      在所有參與機(jī)器上的 DB2 instance owner ID 和密碼應(yīng)該是一致的,而且,它的 home 目錄應(yīng)該在 NFS 共享目錄中。fenced ID 應(yīng)該配置為與 DB2 instance owner ID 相同。DAS 用戶 ID 和密碼在所有參與機(jī)器上可以各不相同;但是,為了簡(jiǎn)化配置和維護(hù),可能需要使 DAS 用戶 ID 和密碼一致。

      例如,您可以用以下命令在所有機(jī)器上創(chuàng)建 DB2 組,創(chuàng)建 DB2 用戶 ID 以及設(shè)置初始密碼:

      • groupadd -g 999 db2iadm1
      • groupadd -g 998 db2fadm1
      • groupadd -g 997 dasadm1
      • useradd -u 1100 -g db2iadm1 -m -d /db2home/db2inst1 db2inst1 -p password1
      • useradd -u 1101 -g db2fadm1 -m -d /db2home/db22fenc1 db2fenc1 -p password2
      • useradd -u 1102 -g dasadm1 -m -d /home/dasadm1 dasusr1 -p password3
      • passwd db2inst1
      • passwd db2fenc1
      • passwd dasusr1

      步驟 7. 在 instance-owning 機(jī)器和所有參與機(jī)器上安裝 DB2 UDB

      可以使用 db2_install 腳本通過(guò) RPM 安裝實(shí)用程序在 Linux 系統(tǒng)上安裝所有的 DB2 ESE 包。您可以使用該腳本首先在 instance-owning 機(jī)器上安裝 DB2,然后在參與機(jī)器上安裝 DB2。

      由于必須在每個(gè)參與機(jī)器上安裝 DB2,所以最好將安裝代碼放在一個(gè)共享的盤(例如在我們這個(gè)例子中是 /db2home)上。也可以將您的設(shè)置記錄到一個(gè)響應(yīng)文件中,然后使用該文件來(lái)配置其他的機(jī)器。

      首先,為了安裝 DB2,必須以 root 用戶登錄:

      • 輸入 db2_install 命令啟動(dòng) db2_install 腳本,該腳本存放在 CD-ROM 的根目錄下。
      • 當(dāng) db2_install 提示輸入產(chǎn)品關(guān)鍵字時(shí),輸入 DB2.ESE

      步驟 8. instance-owning 機(jī)器的配置

      這臺(tái)機(jī)器將被視作 instance-owning 機(jī)器,因?yàn)樗鎯?chǔ)和共享 instance owner 的 home 目錄。sqllib 目錄正是位于這個(gè)目錄中,此外在此目錄中的還有 Database Manager Configuration 文件 (DBM CFG)、Instance Profile Registry、Node 目錄和 System Database 目錄。由于這些文件是共享的,所以對(duì)任何一個(gè)文件的更新在所有參與機(jī)器上都可以看到。為了配置 instance-owning 機(jī)器,需要執(zhí)行以下步驟:

      1. 創(chuàng)建一個(gè) DB2 實(shí)例

        您應(yīng)該使用 DB2 instance owner ID 登錄到系統(tǒng),然后在 /opt/IBM/db2/V8.2/instance 下執(zhí)行 db2icrt 創(chuàng)建一個(gè)供所有機(jī)器共享的 DB2 實(shí)例:

        • cd /opt/IBM/db2/V8.1/instance
        • ./db2icrt -u db2fenc1 db2inst1

        其中 -u 指定 fenced ID。

        需要注意的是,一個(gè) DPF Instance 實(shí)際上存在于每個(gè)參與機(jī)器上,它們都使用相同的實(shí)例名、密碼和共享 home 目錄。當(dāng)使用 DPF 時(shí),被分區(qū)的是數(shù)據(jù)庫(kù),而不是實(shí)例。

      2. 啟用 FCM

        所有參與機(jī)器必須通過(guò)一個(gè)通信設(shè)施互連,例如一個(gè)高速 TCPIP 網(wǎng)絡(luò)。Fast Communications Manager (FCM) 被設(shè)計(jì)用來(lái)處理數(shù)據(jù)庫(kù)分區(qū)服務(wù)器之間的通信。為了啟用 FCM,在所有參與機(jī)器上的 /etc/services 文件中必須預(yù)留一個(gè)端口范圍。DB2 提供在 /etc/services 文件中已經(jīng)被預(yù)留的一個(gè)默認(rèn)的端口范圍;默認(rèn)情況下,DB2 會(huì)修改 /etc/services 文件,以便將端口 60000-60003 用于分區(qū)之間的通信,端口 50000 用于應(yīng)用程序通信。DB2 在創(chuàng)建實(shí)例時(shí)會(huì)為此預(yù)留一些端口。每個(gè)邏輯分區(qū)需要一個(gè)端口,并且每臺(tái)機(jī)器需要預(yù)留相同的端口。每個(gè)條目包含一個(gè)端口名和端口號(hào)。

        除了基本的配置外,F(xiàn)CM 端口看上去應(yīng)該如下所示:


        清單 4. /etc/services 中的 FCM 端口
        
                                                
                                                DB2c_db2inst1               50000/tcp
                                                #Add FCM port information
                                                #
                                                DB2_db2inst1           60000/tcp
                                                DB2_db2inst1_1         60001/tcp
                                                DB2_db2inst1_2         60002/tcp
                                                DB2_db2inst1_END       60003/tcp

        清單 4 中可以看出,端口名是由實(shí)例名加上前綴 "DB2_" 得到的。最后一個(gè)端口名由實(shí)例名加上前綴 "DB2_" 和后綴 "_END" 得到。第一個(gè)端口名與最后一個(gè)端口名之間的端口名以 "_<序列號(hào)>" 為后綴。 端口號(hào)后面必須跟上 "/tcp"。

      3. 更新 DB2 實(shí)例參數(shù)

        使用 instance owner ID 登錄到機(jī)器,并指定 DB2 將使用哪些協(xié)議。為了初始化協(xié)議,需要使用以下命令更新 DB2COMM profile 注冊(cè)表變量:

        db2set DB2COMM=TCPIP

        此外,需要在數(shù)據(jù)庫(kù)管理器(DBM)配置參數(shù)中更新服務(wù)名,以指示哪些端口名將用于與 DB2 服務(wù)器和遠(yuǎn)程客戶機(jī)的通信。這可以通過(guò)使用以下命令來(lái)完成:

        db2 update dbm cfg using SVCENAME db2c_db2inst1

         

      4. 創(chuàng)建 DB2 Administration Server (DAS)

        如果要使用諸如 Configuration Assistant、Control Center、Replication Center 或 Development Centermust 之類的 GUI 工具,則必須讓 DAS 處于運(yùn)行狀態(tài)。您可以作為 DAS 用戶登錄,然后使用以下命令創(chuàng)建一個(gè) DAS 服務(wù)器:

        • cd /opt/IBM/db2/V8.1/instance
        • ./dascrt -u dasusr1

        其中選項(xiàng) -u 指定 DAS 的用戶 ID。

        可以用 DAS 管理用戶 ID 登錄,并執(zhí)行命令 db2admin start 來(lái)啟動(dòng) DAS 服務(wù)器。若要自動(dòng)啟動(dòng) DAS 服務(wù)器,則需要使用 DAS 管理用戶 ID 并執(zhí)行以下命令:

        • cd /opt/IBM/db2/V8.1/instance
        • ./dasauto -on

        為了顯示 autostart 狀態(tài),可以執(zhí)行:

        ./dasauto ?

         

      5. 更新 db2nodes.cfg 文件

        最后,需要更新 $HOME/sqllib/db2nodes.cfg 文件。db2nodes.cfg 文件包含配置信息,告訴 DB2 哪個(gè)服務(wù)器上的哪個(gè)分區(qū)參與了該實(shí)例。該文件有四列:

        • 數(shù)據(jù)庫(kù)分區(qū)號(hào)
        • 服務(wù)器主機(jī)名
        • 邏輯端口號(hào)
        • 用于分區(qū)之間通信的網(wǎng)絡(luò)接口(可選)

        每個(gè)條目表示一個(gè)特定服務(wù)器上的一個(gè)數(shù)據(jù)庫(kù)分區(qū),該分區(qū)參與了該實(shí)例的數(shù)據(jù)庫(kù)分區(qū)。例如,下面的 db2nodes.cfg 文件定義了四個(gè)數(shù)據(jù)分區(qū)。數(shù)據(jù)分區(qū) 0 和 1 在 server1 上,數(shù)據(jù)分區(qū) 2 和 3 在 server2 上。每個(gè)服務(wù)器有兩個(gè)邏輯端口(每個(gè)邏輯分區(qū)對(duì)應(yīng)一個(gè)),即端口 0 和 1。


        清單 5. 示例 db2nodes.cfg
        
                                                
                                                0     server1     0
                                                1     server1     1
                                                2     server2     0
                                                3     server2     1

      6. 更新 .rhosts 文件以允許遠(yuǎn)程命令

        為了允許執(zhí)行遠(yuǎn)程命令,每個(gè)數(shù)據(jù)庫(kù)分區(qū)必須有在所有其他參與服務(wù)器上執(zhí)行遠(yuǎn)程命令的權(quán)限。因此,必須在 /db2home/db2inst1/.rhosts 文件中為每個(gè)服務(wù)器提供一個(gè)條目。.rhosts 文件應(yīng)該有兩列,分別為主機(jī)名和 instance owner ID。例如, .rhosts 文件中的下列條目表示參與一個(gè)實(shí)例的兩個(gè)服務(wù)器。


        清單 6. 示例 .rhosts
        
                                                
                                                server1 db2inst1
                                                server2 db2inst1

        應(yīng)該使用以下命令來(lái)確保只有 root 擁有讀和寫的訪問(wèn)權(quán):

        chmod 600 /db2home/db2inst1/.rhosts

      步驟 9. 參與機(jī)器上的配置

      為了配置參與機(jī)器,需要執(zhí)行以下步驟:

      1. 啟用 FCM

        必須作為 root 用戶登錄到每臺(tái)參與機(jī)器上,并將用于 FCM 定義的相同的端口名和端口號(hào)添加到 /etc/services 文件中。

      2. 創(chuàng)建 DB2 Administration Server

        必須在所有參與機(jī)器上安裝 DAS。關(guān)于詳細(xì)信息,請(qǐng)參考在配置 instance-owning 機(jī)器時(shí)創(chuàng)建 DB2 Administration Server 的方法。

      步驟 10. 檢驗(yàn)

      完成所有更新后,可能需要重新啟動(dòng)服務(wù)器,并在所有參與服務(wù)器上執(zhí)行命令 db2_all date 來(lái)確保成功完成。





      回頁(yè)首


      重要概念

      下面是關(guān)于具有 DPF 功能的 DB2 的一些重要的概念,您應(yīng)該清楚這些概念。

      編目分區(qū)

      DB2 編目是由數(shù)據(jù)庫(kù)管理器維護(hù)的一組表和視圖。這些表和視圖包含元數(shù)據(jù),也就是關(guān)于數(shù)據(jù)庫(kù)和它的對(duì)象的信息,例如對(duì)表、視圖和索引的描述和關(guān)于用戶在這些對(duì)象上所擁有的權(quán)限的安全信息。

      編目分區(qū)是存放數(shù)據(jù)庫(kù)編目表的數(shù)據(jù)庫(kù)分區(qū)。在分區(qū)數(shù)據(jù)庫(kù)環(huán)境中,每個(gè)數(shù)據(jù)庫(kù)可以在一個(gè)不同的數(shù)據(jù)庫(kù)分區(qū)服務(wù)器上有它的編目分區(qū)。數(shù)據(jù)庫(kù)的編目分區(qū)是在運(yùn)行 CREATE DATABASE 命令的數(shù)據(jù)庫(kù)分區(qū)服務(wù)器上自動(dòng)創(chuàng)建的。

      協(xié)調(diào)分區(qū)

      用戶與分區(qū)數(shù)據(jù)庫(kù)的交互是通過(guò)一個(gè)數(shù)據(jù)庫(kù)分區(qū),即用于那個(gè)用戶的協(xié)調(diào)分區(qū)創(chuàng)建的。協(xié)調(diào)分區(qū)與應(yīng)用程序運(yùn)行在同一個(gè)數(shù)據(jù)庫(kù)分區(qū)上,或者,對(duì)于遠(yuǎn)程應(yīng)用程序,協(xié)調(diào)分區(qū)運(yùn)行在應(yīng)用程序所連接的那個(gè)數(shù)據(jù)庫(kù)分區(qū)上。任何數(shù)據(jù)庫(kù)分區(qū)都可以用作協(xié)調(diào)節(jié)點(diǎn),或者被變成協(xié)調(diào)節(jié)點(diǎn)。

      協(xié)調(diào)分區(qū)之所以被這樣稱呼,是因?yàn)檫\(yùn)行在它上面的、與應(yīng)用程序通信的協(xié)調(diào)代理。您可以控制將哪個(gè)分區(qū)用作協(xié)調(diào)分區(qū)。例如,為了連接到分區(qū) 3,可以發(fā)出:

      • set client connect_dbpartitionnum 3
      • connect to SAMPLE

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

      數(shù)據(jù)庫(kù)分區(qū)組是由一個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)組成的一個(gè)組。在為數(shù)據(jù)庫(kù)創(chuàng)建表之前,首先創(chuàng)建用于存儲(chǔ)表空間的數(shù)據(jù)庫(kù)分區(qū)組,然后創(chuàng)建用于存儲(chǔ)表的表空間。

      可以在一個(gè)數(shù)據(jù)庫(kù)中定義包含一個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)的有名稱的子集。每個(gè)子集稱作一個(gè)數(shù)據(jù)庫(kù)分區(qū)組。每個(gè)包含不止一個(gè)數(shù)據(jù)庫(kù)分區(qū)的子集稱作多分區(qū)數(shù)據(jù)庫(kù)分區(qū)組。多分區(qū)數(shù)據(jù)庫(kù)分區(qū)組只能用屬于相同實(shí)例的數(shù)據(jù)庫(kù)分區(qū)來(lái)定義。一個(gè)數(shù)據(jù)庫(kù)分區(qū)可以屬于不止一個(gè)分區(qū)組。

      例如,圖 5 展示了一個(gè)由 5 個(gè)分區(qū)組成的數(shù)據(jù)庫(kù)分區(qū)組:


      圖 5. 3 個(gè)示例數(shù)據(jù)庫(kù)分區(qū)組
      3 個(gè)示例數(shù)據(jù)庫(kù)分區(qū)組

      在這種情況下,Database Partition Group 1 橫跨除一個(gè)數(shù)據(jù)庫(kù)分區(qū)外的所有數(shù)據(jù)庫(kù)分區(qū)。它還包含一個(gè)名為 ‘Database Partition Group 2‘ 的單分區(qū)數(shù)據(jù)庫(kù)分區(qū)組。另外,‘Database Partition Group 3‘ 也與 Database Partition Group 1 共享了一個(gè)數(shù)據(jù)庫(kù)分區(qū)。

      可以用 CREATE DATABASE PARTITION GROUP 語(yǔ)句創(chuàng)建新的數(shù)據(jù)庫(kù)分區(qū),用 ALTER DATABASE PARTITION GROUP 語(yǔ)句修改數(shù)據(jù)庫(kù)分區(qū)。

      數(shù)據(jù)被劃分到一個(gè)數(shù)據(jù)庫(kù)分區(qū)組中的所有分區(qū)上,可以為數(shù)據(jù)庫(kù)分區(qū)組添加一個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū),或者從中去掉數(shù)據(jù)庫(kù)分區(qū)。屬于數(shù)據(jù)庫(kù)系統(tǒng)配置一部分的每個(gè)數(shù)據(jù)庫(kù)分區(qū)都必須在一個(gè)名為 db2nodes.cfg 的分區(qū)配置文件中定義。一個(gè)數(shù)據(jù)庫(kù)分區(qū)組最多可以包含為數(shù)據(jù)庫(kù)系統(tǒng)定義的所有數(shù)據(jù)庫(kù)分區(qū)。

      當(dāng)創(chuàng)建或修改一個(gè)數(shù)據(jù)庫(kù)分區(qū)組時(shí),就會(huì)有一個(gè)與之關(guān)聯(lián)的分區(qū)映射。數(shù)據(jù)庫(kù)管理器可以通過(guò)將分區(qū)映射與分區(qū)鍵和散列算法相結(jié)合,來(lái)確定數(shù)據(jù)庫(kù)分區(qū)組中的哪些數(shù)據(jù)庫(kù)分區(qū)將存儲(chǔ)給定的數(shù)據(jù)行。在一個(gè)非分區(qū)數(shù)據(jù)庫(kù)中,不需要分區(qū)鍵或分區(qū)映射。過(guò)一會(huì)兒我們將詳細(xì)討論這些概念。

      一個(gè)數(shù)據(jù)庫(kù)分區(qū)是數(shù)據(jù)庫(kù)的一部分,其中具有用戶數(shù)據(jù)、索引、配置文件和事務(wù)日志。有一些默認(rèn)的數(shù)據(jù)庫(kù)分區(qū)組是在數(shù)據(jù)庫(kù)創(chuàng)建時(shí)被創(chuàng)建的:

      • IBMCATGROUP - 用于包含系統(tǒng)編目的表空間的默認(rèn)數(shù)據(jù)庫(kù)分區(qū)組。
      • IBMTEMPGROUP - 用于系統(tǒng)臨時(shí)表空間的默認(rèn)數(shù)據(jù)庫(kù)分區(qū)組。
      • IBMDEFAULTGROUP - 用于包含用戶表的表空間的默認(rèn)數(shù)據(jù)庫(kù)分區(qū)組。

      用于已聲明的臨時(shí)表的用戶臨時(shí)表空間可以在 IBMDEFAULTGROUP 或任何用戶創(chuàng)建的數(shù)據(jù)庫(kù)分區(qū)組中創(chuàng)建,但不能在 IBMTEMPGROUP 中創(chuàng)建。

      為了創(chuàng)建一個(gè)新的由 db2nodes.cfg 中所有分區(qū)組成的分區(qū)組,可以發(fā)出以下命令:

      create database partition group ALLPART on all dbpartitionnums

      如果您想創(chuàng)建一個(gè)新的分區(qū)組,且這個(gè)分區(qū)組只包含分區(qū) 1 和 2,可以發(fā)出如下命令:

      create database partition group PART12 on dbpartitionnums (1,2)

      分區(qū)兼容性

      可對(duì)分區(qū)鍵的對(duì)應(yīng)列的基本數(shù)據(jù)類型進(jìn)行比較,并可將它們聲明為是分區(qū)兼容的(partition compatible)。分區(qū)兼容的數(shù)據(jù)類型具有如下屬性:具有相同值但有不同類型的兩個(gè)變量會(huì)按相同的分區(qū)算法映射至同一個(gè)分區(qū)號(hào)。 分區(qū)兼容性具有下列特征:

      • 基本數(shù)據(jù)類型與另一個(gè)相同的基本數(shù)據(jù)類型兼容。
      • 內(nèi)部格式用于 DATE、TIME 和 TIMESTAMP 數(shù)據(jù)類型。它們彼此都不兼容,且都不與 CHAR 兼容。
      • 分區(qū)兼容性不受帶有 NOT NULL 或 FOR BIT DATA 定義的列的影響。
      • 對(duì)兼容數(shù)據(jù)類型的 NULL 值的處理是完全相同的;對(duì)不兼容數(shù)據(jù)類型的 NULL 值的處理可能不相同。
      • 用戶定義的類型的基本數(shù)據(jù)類型用于分析分區(qū)兼容性。
      • 對(duì)分區(qū)鍵中相同值的小數(shù)的處理是完全相同的,即使它們的標(biāo)度和精度不同。
      • 字符串中(CHAR、VARCHAR GRAPHIC 或 VARGRAPHIC)的尾部空格會(huì)被散列算法忽略。
      • BIGINT、SMALLINT 和 INTEGER 是兼容的數(shù)據(jù)類型。
      • REAL 和 FLOAT 是兼容的數(shù)據(jù)類型。
      • 不同長(zhǎng)度的 CHAR 和 VARCHAR 是兼容的數(shù)據(jù)類型。
      • GRAPHIC 和 VARGRAPHIC 是兼容的數(shù)據(jù)類型。
      • 分區(qū)兼容性不適用于 LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB 和 BLOB 數(shù)據(jù)類型,因?yàn)樗鼈儾荒茏鳛榉謪^(qū)鍵。

      并置

      并置(collocation)是安置同一個(gè)數(shù)據(jù)庫(kù)分區(qū)中包含相關(guān)數(shù)據(jù)的不同表中的行。并置的表使 DB2 可以更有效地使用連接策略。

      您可能會(huì)發(fā)現(xiàn),作為對(duì)特定查詢的響應(yīng),兩個(gè)或多個(gè)表頻繁地提供數(shù)據(jù)。在此情況下,您會(huì)希望這樣的表中的相關(guān)數(shù)據(jù)的位置盡可能地靠近。在數(shù)據(jù)庫(kù)被物理地劃分為兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)的環(huán)境中,必須有一種方法可將劃分的表的相關(guān)碎片盡可能地靠近。完成此過(guò)程的功能稱為表并置

      當(dāng)存取用于連接或子查詢的多個(gè)表時(shí),DB2(R) 通用數(shù)據(jù)庫(kù)(DB2 UDB)能夠識(shí)別要連接的數(shù)據(jù)是否位于相同數(shù)據(jù)庫(kù)分區(qū)上。于是 DB2 就可以在存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)分區(qū)上執(zhí)行連接或子查詢,而不必在數(shù)據(jù)庫(kù)分區(qū)之間移動(dòng)數(shù)據(jù)。這種局部地執(zhí)行連接或子查詢的能力具有顯著的性能優(yōu)點(diǎn)。

      要發(fā)生并置,表必須:

      • 在相同數(shù)據(jù)庫(kù)分區(qū)組中,且這個(gè)數(shù)據(jù)庫(kù)分區(qū)組不能處在再分配期間。(在再分配期間,數(shù)據(jù)庫(kù)分區(qū)組中的表可能使用不同的分區(qū)映射 —— 它們不是并置的。)
      • 有包含相同數(shù)量的列的分區(qū)鍵。
      • 分區(qū)鍵的相應(yīng)列是分區(qū)兼容的。

      如果一個(gè)表在一個(gè)單分區(qū)數(shù)據(jù)庫(kù)分區(qū)組中,且該分區(qū)組是在另一個(gè)表所在的同一個(gè)分區(qū)上定義的,那么也可以發(fā)生并置。

      緩沖池

      緩沖池是處理期間用于存放數(shù)據(jù)頁(yè)和從中讀取、修改數(shù)據(jù)頁(yè)的一個(gè)內(nèi)存區(qū)域。默認(rèn)情況下,當(dāng)創(chuàng)建一個(gè)緩沖池時(shí),在每個(gè)分區(qū)上都會(huì)創(chuàng)建這樣的緩沖池。為了容易管理,通常最好的做法是使每個(gè)分區(qū)上的緩沖池大小一致。但是,也可以改變特定分區(qū)上的緩沖池大小。例如,若要將分區(qū) 4 的 ‘BUF8K‘ 緩沖池改為 400MB,可以發(fā)出命令:

      alter bufferpool BUF8K dbpartitionnum 4 size 51200

      還可以通過(guò)指定一個(gè)數(shù)據(jù)庫(kù)分區(qū)組來(lái)選擇在哪幾個(gè)分區(qū)上創(chuàng)建緩沖池,在此情況下,只有在數(shù)據(jù)庫(kù)分區(qū)組中的那些分區(qū)上才會(huì)創(chuàng)建緩沖池。

      表空間

      表空間是存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象的容器集合的抽象。表空間在數(shù)據(jù)庫(kù)與存儲(chǔ)在數(shù)據(jù)庫(kù)中的表之間提供了一個(gè)間接層。對(duì)于每個(gè)表空間,在存儲(chǔ)設(shè)備上都有一個(gè)空間與之對(duì)應(yīng)。一個(gè)表中的數(shù)據(jù)、索引、long 字段和 LOB 部分可以存儲(chǔ)在相同的表空間中,也可以分別放到不同的表空間中,以提高性能。

      數(shù)據(jù)庫(kù)分區(qū)表達(dá)式

      當(dāng)定義一個(gè)橫跨同一臺(tái)機(jī)器上多個(gè)邏輯數(shù)據(jù)庫(kù)分區(qū)的表空間的容器時(shí),為了避免一個(gè)以上的邏輯分區(qū)具有相同的路徑/設(shè)備名稱,通常使用數(shù)據(jù)庫(kù)分區(qū)表達(dá)式(Database Partition Expression)。通過(guò)使用數(shù)據(jù)庫(kù)分區(qū)號(hào)作為容器名稱的一部分,可以確保容器名稱在各分區(qū)當(dāng)中是惟一的。這可以作為手動(dòng)地為每個(gè)分區(qū)指定位置的替代方法。

      可以使用參數(shù) " $N" ([blank]$N) 來(lái)表示一個(gè)數(shù)據(jù)庫(kù)分區(qū)表達(dá)式,它可以用在容器名稱的任何地方,而且可以指定多個(gè)數(shù)據(jù)庫(kù)分區(qū)表達(dá)式。數(shù)據(jù)庫(kù)分區(qū)表達(dá)式以一個(gè)空格字符結(jié)束;數(shù)據(jù)庫(kù)分區(qū)表達(dá)式計(jì)算完畢后,空格后的內(nèi)容附在容器名稱的后面。 如果容器名稱中在數(shù)據(jù)庫(kù)分區(qū)表達(dá)式后面沒(méi)有空格字符,則認(rèn)為剩下的字符串是表達(dá)式的一部分。

      參數(shù)的使用只能以如下一種格式出現(xiàn)(在這個(gè)例子中,假設(shè)分區(qū)號(hào)是 5):


      表 5. 常見(jiàn)數(shù)據(jù)庫(kù)分區(qū)表達(dá)式
      語(yǔ)法 例子
      [blank]$N " $N" 5
      [blank]$N+[number] " $N+1011" 1016
      [blank]$N%[number] " $N%3" (% 是模塊) 2
      [blank]$N+[number]%[number] " $N+12%13" 4
      [blank]$N%[number]+[number] " $N%3+20" 22

      如果使用類似于上面的字符串,并且分區(qū)號(hào)仍然是 5,那么將看到:


      表 6. 數(shù)據(jù)庫(kù)分區(qū)表達(dá)式的使用
      例子 容器名稱
      ‘/dbdir/node $N /cont1‘ ‘/dbdir/node5/cont1‘
      ‘/ $N+1000 /file1‘ ‘/1005/file1‘
      ‘ $N%10 /container‘ ‘5/container‘
      ‘/dir/ $N%5+2000 /dmscont‘ ‘/dir/2000/dmscont‘

      如果在一個(gè)由兩個(gè)分區(qū)組成的數(shù)據(jù)庫(kù)上發(fā)出以下語(yǔ)句:

      CREATE TABLESPACE TBSP1 MANAGED BY DATABASE USING (device ‘/dev/container $N‘ 10000)

      那么將看到下列容器被創(chuàng)建:

      • /dev/container0 - on DATABASE PARTITION 0
      • /dev/container1 - on DATABASE PARTITION 1

      分區(qū)鍵

      分區(qū)鍵是用于確定特定一行數(shù)據(jù)存儲(chǔ)在哪個(gè)分區(qū)的一個(gè)列(或一組列)。

      分區(qū)鍵是在一個(gè)表上用 CREATE TABLE 語(yǔ)句定義的。如果沒(méi)有提供分區(qū)鍵,則默認(rèn)地從主鍵的第一個(gè)列創(chuàng)建分區(qū)鍵。如果沒(méi)有主鍵,則默認(rèn)的分區(qū)鍵是表上第一個(gè)非 long/非 LOB 型的列。如果沒(méi)有列能滿足作為默認(rèn)分區(qū)鍵的條件,則表在創(chuàng)建后就沒(méi)有分區(qū)鍵,也就意味著這個(gè)表不能橫跨一個(gè)以上的分區(qū)。

      在選擇分區(qū)鍵時(shí),應(yīng)該注意以下幾點(diǎn):

      • 表是如何被訪問(wèn)的。
      • 查詢工作負(fù)載的性質(zhì)。
      • 數(shù)據(jù)庫(kù)系統(tǒng)所采用的連接策略。

      如果不需要特別考慮并置,那么能使數(shù)據(jù)均勻地散布在數(shù)據(jù)庫(kù)分區(qū)組中所有數(shù)據(jù)庫(kù)分區(qū)上的分區(qū)鍵就是好的分區(qū)鍵。在與一個(gè)數(shù)據(jù)庫(kù)分區(qū)組相關(guān)聯(lián)的表空間中,每個(gè)表的分區(qū)鍵可以確定表是否是并置的。

      不恰當(dāng)?shù)姆謪^(qū)鍵可能導(dǎo)致數(shù)據(jù)分布不均勻。具有分布不均勻的數(shù)據(jù)的列和具有少量 distinct 值的列都不應(yīng)該被選作分區(qū)鍵。distinct 值的數(shù)量必須多到足以確保數(shù)據(jù)行均勻地分布在數(shù)據(jù)庫(kù)分區(qū)組中的所有數(shù)據(jù)庫(kù)分區(qū)上。應(yīng)用分區(qū)散列算法的代價(jià)與分區(qū)鍵的規(guī)模成比例。分區(qū)鍵不能多于 16 個(gè)列,列數(shù)越少導(dǎo)致的性能就越好。分區(qū)鍵中不應(yīng)該包括不必要的列。

      在定義分區(qū)鍵時(shí),應(yīng)考慮以下幾點(diǎn):

      • 只包含 long 數(shù)據(jù)類型(LONG VARCHAR、 LONG VARGRAPHIC、BLOB、CLOB 或 DBCLOB)的多分區(qū)的表的創(chuàng)建是不受支持的。
      • 分區(qū)鍵的定義不能修改。
      • 分區(qū)鍵應(yīng)該包括最頻繁參與連接的列。
      • 分區(qū)鍵應(yīng)該由經(jīng)常出現(xiàn)在 GROUP 子句中的列組成。
      • 任何惟一鍵或主鍵都必須包含分區(qū)鍵中的所有列。
      • 在在線事務(wù)處理(OLTP)環(huán)境中,分區(qū)鍵中的所有列出現(xiàn)在事務(wù)中時(shí)應(yīng)該使用等號(hào)(=)加常量或主機(jī)變量。例如,假設(shè)在事務(wù)中經(jīng)常用到雇員號(hào) emp_no:

        UPDATE emp_table SET ... WHERE emp_no = host-variable

        在此情況下,EMP_NO 列可以作為 EMP_TABLE 的由單列組成的分區(qū)鍵。

      散列分區(qū)是用于確定每一行在分區(qū)表中的位置的方法。該方法工作原理如下:

      1. 散列算法應(yīng)用于分區(qū)鍵的值,產(chǎn)生 0 到 4095 之間的一個(gè)分區(qū)號(hào)。
      2. 當(dāng)創(chuàng)建數(shù)據(jù)庫(kù)分區(qū)組時(shí),同時(shí)會(huì)創(chuàng)建分區(qū)映射。每個(gè)分區(qū)號(hào)按循環(huán)的方式順序地填充分區(qū)映射。
      3. 分區(qū)號(hào)用作分區(qū)映射的索引。分區(qū)映射中的號(hào)碼就是表所在的數(shù)據(jù)庫(kù)分區(qū)的分區(qū)號(hào)。

      分區(qū)映射

      在分區(qū)數(shù)據(jù)庫(kù)環(huán)境中,數(shù)據(jù)庫(kù)管理器必須有方法知道表的哪些行存儲(chǔ)在哪個(gè)數(shù)據(jù)庫(kù)分區(qū)上,以便發(fā)現(xiàn)它需要的數(shù)據(jù)。數(shù)據(jù)庫(kù)管理器使用一個(gè)稱作分區(qū)映射的映射來(lái)發(fā)現(xiàn)數(shù)據(jù)。

      分區(qū)映射是內(nèi)部生成的數(shù)組,對(duì)于多分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組,這個(gè)數(shù)組包含 4,096 個(gè)條目,對(duì)于單分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組,這個(gè)數(shù)組只包含一個(gè)條目。

      對(duì)于單分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組,分區(qū)映射只有一個(gè)條目,其中包含數(shù)據(jù)庫(kù)表中所有的行所在的數(shù)據(jù)庫(kù)分區(qū)的分區(qū)號(hào)。對(duì)于多分區(qū)數(shù)據(jù)庫(kù)分區(qū)組,數(shù)據(jù)庫(kù)分區(qū)組中的分區(qū)號(hào)是以循環(huán)的方式指定的。就像城市地圖按網(wǎng)格分成一些區(qū)一樣,數(shù)據(jù)庫(kù)管理器使用分區(qū)鍵來(lái)確定數(shù)據(jù)所存儲(chǔ)在的位置(數(shù)據(jù)庫(kù)分區(qū))。

      例如,假設(shè)您在 5 個(gè)數(shù)據(jù)庫(kù)分區(qū)(分區(qū)號(hào)為 0-4)上有一個(gè)數(shù)據(jù)庫(kù)。那么,這個(gè)數(shù)據(jù)庫(kù)的 IBMDEFAULTGROUP 數(shù)據(jù)庫(kù)分區(qū)組的分區(qū)映射為:

      0 1 2 3 4 0 1 2 3 4 0 1 2...

      如果在使用數(shù)據(jù)庫(kù)分區(qū) 1 和 2 的數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)分區(qū)組,那么這個(gè)數(shù)據(jù)庫(kù)分區(qū)組的分區(qū)映射為:

      1 2 1 2 1 2 1 2...

      如果數(shù)據(jù)庫(kù)中所裝載的表的分區(qū)鍵是 1 到 500,000 之間的整數(shù),則分區(qū)鍵被散列到 0 到 4 095 之間的一個(gè)分區(qū)號(hào)。這個(gè)號(hào)碼將用于作為分區(qū)映射的一個(gè)索引,以選擇那一行所在的數(shù)據(jù)庫(kù)分區(qū)。

      分區(qū)映射是在分區(qū)數(shù)據(jù)庫(kù)中控制數(shù)據(jù)存儲(chǔ)位置的一種靈活的方式。另外還有一種再分配(redistribution)實(shí)用程序,通過(guò)它可以改變數(shù)據(jù)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)分區(qū)上的分布(使之平衡或偏斜),不過(guò)這超出了本文的范圍。

      DB2NODE 環(huán)境變量

      DB2NODE 環(huán)境變量用于指定想要連接到的目標(biāo)邏輯分區(qū)。如果沒(méi)有設(shè)置該變量,那么它將默認(rèn)地等于用機(jī)器上的端口 0 定義的那個(gè)分區(qū)(在 db2nodes.cfg 文件中)。

      如果要連接到邏輯分區(qū) 2,那么可以輸入以下命令:

      • DB2NODE=2
      • export DB2NODE
      • db2 terminate

      為了確保更改生效,必須用 terminate 命令。

      為了識(shí)別當(dāng)前活動(dòng)邏輯節(jié)點(diǎn),可以發(fā)出以下命令:

      db2 "values (current dbpartitionnum)"

      發(fā)出橫跨多個(gè)機(jī)器和分區(qū)的命令

      這兩個(gè)工具使跨所有機(jī)器或所有分區(qū)執(zhí)行命令變得容易。兩個(gè)工具使用相同的一組有用的選項(xiàng),這些選項(xiàng)可以在 DB2 Command Window 中通過(guò) "rah ?" 或 "db2_all ?" 命令顯示出來(lái)。

      db2_all

      db2_all 用于在所有指定的分區(qū)上運(yùn)行命令。

      db2_all ";db2 update db cfg for SAMPLE using NEWLOGPATH /db2_db/logs"

      分號(hào)用于作為一個(gè)前綴,表明該命令將在各分區(qū)上并發(fā)地運(yùn)行。

      rah

      rah 用于在組成分區(qū)環(huán)境的所有機(jī)器上運(yùn)行一個(gè)命令。

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

      當(dāng)執(zhí)行離線數(shù)據(jù)庫(kù)備份時(shí),需要單獨(dú)備份編目分區(qū)。但是,在線備份時(shí)就不需要這樣,因?yàn)槿罩臼前ㄔ趥浞葭R像中的。例如,我們有一個(gè)名為 sample 的數(shù)據(jù)庫(kù)和一個(gè) /dev/backup 目錄,從所有分區(qū)那里都可以訪問(wèn)這個(gè)目錄。

      首先需要備份位于分區(qū) 0 上的編目分區(qū),這里只需指定 "<<+0<"" (在這個(gè)例子中)

      db2_all ‘<<+0< db2 BACKUP DATABASE sample TO /dev/backup‘

      接著備份其他分區(qū)(除了分區(qū) 0),方法是指定 "<<-0<":

      db2_all ‘|<<-0< db2 BACKUP DATABASE sample TO /dev/backup‘

      注意,前綴 "|" 將導(dǎo)致依次運(yùn)行 BACKUP 命令?,F(xiàn)在,在 /dev/backup 目錄中可以找到每個(gè)分區(qū)的備份鏡像。

      表中行的分布

      DBPARTITIONNUM 函數(shù)可用于確定一個(gè)行所在的分區(qū)。例如,如果用在一個(gè) SELECT 子句中,那么該函數(shù)將返回表中組成 SELECT 語(yǔ)句結(jié)果的每一行的分區(qū)號(hào)。

      該函數(shù)的參數(shù)必須是一個(gè)表中某一列的全限定或非限定列名。結(jié)果的數(shù)據(jù)類型是 INTEGER,并且不會(huì)為 null。由于只返回行這一級(jí)的信息,所以不管指定表的哪一列,結(jié)果總是相同的。如果沒(méi)有 db2nodes.cfg 文件,則結(jié)果為 0。

      例如:

      select lastname, dbpartitionnum(lastname) as part_num from employee order by 1


      清單 7. 使用 dbpartitionnum 函數(shù)的結(jié)果集
      
                                          
                                          LASTNAME        PART_NUM
                                          --------------- -----------
                                          ADAMSON                   0
                                          BROWN                     2
                                          GEYER                     1
                                          GOUNOT                    1
                                          HAAS                      1
                                          HENDERSON                 0
                                          JEFFERSON                 1
                                          JOHNSON                   1
                                          JONES                     3

      節(jié)點(diǎn)和數(shù)據(jù)庫(kù)目錄

      節(jié)點(diǎn)(node)目錄包含在建立從客戶機(jī)工作站到所有合適的數(shù)據(jù)庫(kù)服務(wù)器的通信時(shí)所需的信息。

      數(shù)據(jù)庫(kù)(database)目錄包含客戶機(jī)所連接到的所有數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)訪問(wèn)信息。





      回頁(yè)首


      設(shè)計(jì)上的考慮

      DB2 Design Advisor 是獲得有效的分區(qū)建議的最直接的工具,可以通過(guò) Control Center GUI 或 db2advis 命令行工具來(lái)使用它。通過(guò)一個(gè)可更新的分區(qū)映射,結(jié)合一個(gè)散列算法,可以指定分區(qū)鍵與數(shù)據(jù)庫(kù)分區(qū)的映射,這個(gè)映射可用于確定每個(gè)數(shù)據(jù)行的位置和檢索。

      于是,對(duì)于大型的表,工作負(fù)載可以分布在多個(gè)分區(qū)上,而更小的表也可以存儲(chǔ)在一個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)上。由于每個(gè)數(shù)據(jù)庫(kù)分區(qū)都有它的數(shù)據(jù)上的本地索引,因此提高了本地?cái)?shù)據(jù)訪問(wèn)的性能。

      DB2 還支持部分分塊(de-clustering),在此情況下,表和表空間可以分布在可用分區(qū)的一個(gè)子集上。取決于數(shù)據(jù)庫(kù)分區(qū)的數(shù)量,您可以有一個(gè)或多個(gè)單分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組,以及一個(gè)或多個(gè)多分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組。每個(gè)分區(qū)必須使用一個(gè)惟一的分區(qū)號(hào),而同一個(gè)數(shù)據(jù)庫(kù)分區(qū)可以屬于一個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)組中。

      為了確保包含系統(tǒng)編目表的分區(qū)能夠快速恢復(fù),應(yīng)避免將用戶表也放在那個(gè)數(shù)據(jù)庫(kù)分區(qū)上。為此,可以將用戶表放在不包括 IBMCATGROUP 數(shù)據(jù)庫(kù)分區(qū)組中的數(shù)據(jù)庫(kù)分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組中。

      除非想要利用與更大的表的并置,否則應(yīng)該將小型的表放在單分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組中。應(yīng)避免使中等規(guī)模的表橫跨太多的數(shù)據(jù)庫(kù)分區(qū)。例如,對(duì)于一個(gè) 100 MB 的表,將它放在包含 16 個(gè)分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組上可能比將它放在包含 32 個(gè)分區(qū)的數(shù)據(jù)庫(kù)分區(qū)組上得到的性能要好。

      您可以使用數(shù)據(jù)庫(kù)分區(qū)組來(lái)將在線事務(wù)處理(OLTP)表與決策支持(DSS)表隔離開來(lái),以確保 OLTP 事務(wù)的性能不受負(fù)面影響。

      在多分區(qū)數(shù)據(jù)庫(kù)分區(qū)組中,如果索引是分區(qū)鍵的超集,那么只能創(chuàng)建一個(gè)惟一的索引。

      在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),應(yīng)確保在用于數(shù)據(jù)庫(kù)位置的 "ON" 子句中指定一個(gè)本地(非共享)目錄。例如,

      CREATE DATABASE SAMPLE ON /db2_db

      其中 /db2_db is 是一個(gè)預(yù)先存在的本地目錄。

      在默認(rèn)情況下,數(shù)據(jù)庫(kù)管理器配置中的默認(rèn)數(shù)據(jù)庫(kù)路徑(DBTDBPATH)參數(shù)是 instance owner(被 NFS 共享)的 home 目錄的位置。如果在不指定數(shù)據(jù)庫(kù)位置的情況下創(chuàng)建數(shù)據(jù)庫(kù),那么將使用 DBTDBPATH 創(chuàng)建數(shù)據(jù)庫(kù),這里 DBTDBPATH 指向共享的 instance-owner 目錄。這樣將降低性能。

      創(chuàng)建數(shù)據(jù)庫(kù)之后,應(yīng)該確保每個(gè)數(shù)據(jù)分區(qū)還有它自己的日志本地目錄。您可以使用以下命令:

      db2_all ";db2 update db cfg for SAMPLE using NEWLOGPATH /db2_db/logs"

      節(jié)點(diǎn)號(hào)被自動(dòng)附加在路徑的后面。這樣做是為了維護(hù)多邏輯節(jié)點(diǎn)配置中路徑的惟一性。



        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多