大數(shù)據(jù)量數(shù)據(jù)整合與查詢(xún)性能優(yōu)化(IBMAIX5.3)v1.0_第1頁(yè)
大數(shù)據(jù)量數(shù)據(jù)整合與查詢(xún)性能優(yōu)化(IBMAIX5.3)v1.0_第2頁(yè)
大數(shù)據(jù)量數(shù)據(jù)整合與查詢(xún)性能優(yōu)化(IBMAIX5.3)v1.0_第3頁(yè)
大數(shù)據(jù)量數(shù)據(jù)整合與查詢(xún)性能優(yōu)化(IBMAIX5.3)v1.0_第4頁(yè)
大數(shù)據(jù)量數(shù)據(jù)整合與查詢(xún)性能優(yōu)化(IBMAIX5.3)v1.0_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、大數(shù)據(jù)量數(shù)據(jù)整合與查詢(xún)性能優(yōu)化中軟國(guó)際jimmy(zhaojianmi)本文適用操作系統(tǒng)平臺(tái)為ibm aix 5.3,也可用于一般unix平臺(tái);數(shù)據(jù)庫(kù)為ibm db2,版本9.1。文中引用了筆者在金宏工程外匯管理局整合數(shù)據(jù)庫(kù)、統(tǒng)計(jì)分析系統(tǒng)和綜合查詢(xún)子系統(tǒng)的開(kāi)發(fā)經(jīng)驗(yàn)。本文只考慮單一節(jié)點(diǎn)的數(shù)據(jù)庫(kù),沒(méi)有討論數(shù)據(jù)庫(kù)集群。閱讀說(shuō)明本文主要面向數(shù)據(jù)庫(kù)設(shè)計(jì)和開(kāi)發(fā)人員、部署人員和性能調(diào)優(yōu)人員。在項(xiàng)目的初始階段(設(shè)計(jì)初期或更早),建議閱讀本文的所有內(nèi)容。在項(xiàng)目的后期(開(kāi)發(fā)階段或部署階段),建議閱讀的部分:3 緩沖池和表空間3.1 緩沖池3.2 緩沖池大小3.3 表空間頁(yè)大小及容器分布(容器分布部分)3.4 系統(tǒng)

2、臨時(shí)表空間3.5 區(qū)段大小和預(yù)取大小3.5.2 預(yù)取大小4 提高sql語(yǔ)句執(zhí)行效率4.1 建立索引4.3 減少對(duì)數(shù)據(jù)庫(kù)的更新和刪除操作4.4 如何使訪(fǎng)問(wèn)更高效5 參數(shù)調(diào)優(yōu)5.1 aix系統(tǒng)5.2 db2環(huán)境變量5.3 db2數(shù)據(jù)庫(kù)實(shí)例參數(shù)5.4 db2數(shù)據(jù)庫(kù)參數(shù)6 結(jié)論 趙堅(jiān)密,完成于2009-2-12凌晨備忘:2008-2-13下午4點(diǎn),于融科參加技術(shù)交流會(huì)目錄大數(shù)據(jù)量數(shù)據(jù)整合與查詢(xún)性能優(yōu)化- 1 -中軟國(guó)際jimmy(zhaojianmi)- 1 -閱讀說(shuō)明- 1 -目錄- 2 -1 db2數(shù)據(jù)庫(kù)- 4 -1.1 數(shù)據(jù)庫(kù)對(duì)象- 4 -1.1.1 實(shí)例- 5 -1.1.2 數(shù)據(jù)庫(kù)- 5 -1

3、.1.3 節(jié)點(diǎn)組- 5 -1.1.4 表- 5 -1.1.5 視圖- 5 -1.1.6 索引- 5 -1.1.7 模式- 7 -1.1.8 系統(tǒng)目錄表- 7 -1.2 存儲(chǔ)器對(duì)象- 7 -1.2.1 表空間- 7 -1.2.2 容器- 9 -1.2.3 緩沖池- 9 -2 表空間存儲(chǔ)- 10 -2.1 aix系統(tǒng)存儲(chǔ)管理簡(jiǎn)介- 10 -2.2 裸設(shè)備vs文件系統(tǒng)- 11 -2.3 系統(tǒng)管理vs數(shù)據(jù)庫(kù)管理- 12 -2.4 如何合理創(chuàng)建表空間設(shè)備- 13 -2.4.1 原則- 13 -2.4.2 表空間容器的創(chuàng)建方法- 13 -2.4.3整合數(shù)據(jù)庫(kù)表空間設(shè)備情況- 14 -2.5 建庫(kù)語(yǔ)句參考-

4、 14 -3 緩沖池和表空間- 16 -3.1 緩沖池- 16 -3.2 緩沖池大小- 16 -3.3 表空間頁(yè)大小及容器分布- 16 -3.4 系統(tǒng)臨時(shí)表空間- 17 -3.5 區(qū)段大小和預(yù)取大小- 17 -3.5.1 區(qū)段大小- 18 -3.5.2 預(yù)取大小- 18 -4 提高sql語(yǔ)句執(zhí)行效率- 19 -4.1 建立索引- 19 -4.2 采用表分區(qū)- 20 -4.3 減少對(duì)數(shù)據(jù)庫(kù)的更新和刪除操作- 20 -4.4 如何使訪(fǎng)問(wèn)更高效- 21 -5 參數(shù)調(diào)優(yōu)- 22 -5.1 aix系統(tǒng)- 22 -5.2 db2環(huán)境變量- 23 -5.3 db2數(shù)據(jù)庫(kù)實(shí)例參數(shù)- 23 -5.4 db2數(shù)據(jù)

5、庫(kù)參數(shù)- 24 -6 開(kāi)始行動(dòng)- 25 -7 參考文獻(xiàn)- 26 -1 db2數(shù)據(jù)庫(kù)1.1 數(shù)據(jù)庫(kù)對(duì)象關(guān)鍵的數(shù)據(jù)庫(kù)對(duì)象包括:實(shí)例、數(shù)據(jù)庫(kù)、節(jié)點(diǎn)組、表、視圖、索引、模式、系統(tǒng)目錄表。圖1顯示了一些數(shù)據(jù)庫(kù)對(duì)象之間的關(guān)系。它也顯示了表、索引和長(zhǎng)整型數(shù)據(jù)存儲(chǔ)在表空間中的情況。圖1. 一些數(shù)據(jù)庫(kù)對(duì)象之間的關(guān)系1.1.1 實(shí)例實(shí)例(有時(shí)稱(chēng)為數(shù)據(jù)庫(kù)管理程序)是管理數(shù)據(jù)的db2代碼。它控制可對(duì)數(shù)據(jù)執(zhí)行的操作,并管理分配給它的系統(tǒng)資源。每一個(gè)實(shí)例都是一個(gè)完整的環(huán)境。一個(gè)實(shí)例有它自己的數(shù)據(jù)庫(kù)(其他的實(shí)例不能存取它)。它還有獨(dú)立的安全性,不受同一機(jī)器(系統(tǒng))上其他實(shí)例的影響。1.1.2 數(shù)據(jù)庫(kù)關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)表示成表

6、的集合。表由數(shù)目已定的列和任意數(shù)目的行組成。每個(gè)數(shù)據(jù)庫(kù)都包括一組描述數(shù)據(jù)的邏輯和物理結(jié)構(gòu)的系統(tǒng)目錄表,一個(gè)包含為該數(shù)據(jù)庫(kù)分配的參數(shù)值的配置文件以及一個(gè)帶有正在進(jìn)行的事務(wù)和可歸檔事務(wù)的恢復(fù)日志。1.1.3 節(jié)點(diǎn)組節(jié)點(diǎn)組是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)組成的集合。當(dāng)您想為數(shù)據(jù)庫(kù)創(chuàng)建表時(shí),首先創(chuàng)建節(jié)點(diǎn)組以存儲(chǔ)表空間,然后創(chuàng)建表空間以存儲(chǔ)表。1.1.4 表關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)表示成表的集合。表由邏輯排列的行和列數(shù)據(jù)組成。所有數(shù)據(jù)庫(kù)的表數(shù)據(jù)都被存儲(chǔ)在表空間中。1.1.5 視圖視圖是高效率的數(shù)據(jù)呈現(xiàn)方法(無(wú)需維護(hù)數(shù)據(jù))。視圖不是實(shí)際的表,不需要永久性存儲(chǔ)器。創(chuàng)建并使用一個(gè)“虛擬表”。視圖可以包括它所基于的表中的所有或某

7、些列或行。例如,可以在視圖中連接一個(gè)部門(mén)表和一個(gè)員工表,以便可以列出特定部門(mén)中的所有雇員。圖2顯示了表和視圖的關(guān)系。1.1.6 索引索引是一組關(guān)鍵字,其每一個(gè)都指向一些行。例如,圖3中,表a的一個(gè)索引基于表中的員工號(hào)碼。此關(guān)鍵字提供指向表行的指針:?jiǎn)T工號(hào)碼19指向員工kmp。通過(guò)使用指針創(chuàng)建指向數(shù)據(jù)的直接路徑,索引是更有效的存取表行成為可能。sql優(yōu)化器自動(dòng)選擇最有效率的存取表中數(shù)據(jù)的方法。當(dāng)確定最快速的數(shù)據(jù)存取路徑時(shí),優(yōu)化器會(huì)將索引考慮在內(nèi)。可創(chuàng)建唯一索引以確保索引關(guān)鍵字的唯一性。索引關(guān)鍵字是定義了索引的一個(gè)列或一些列的有序集合。使用唯一索引將確保在編入的索引的列中,每個(gè)索引關(guān)鍵字的值都是唯

8、一的。圖3顯示了索引與表之間的關(guān)系。圖2. 表和視圖之間的關(guān)系圖3. 索引與表之間的關(guān)系1.1.7 模式模式是一個(gè)標(biāo)識(shí)符,如用戶(hù)id,它幫助分組表和其他數(shù)據(jù)庫(kù)對(duì)象。模式可以歸個(gè)人擁有,擁有者可以控制對(duì)數(shù)據(jù)以及其中的對(duì)象的存取。模式也可以是數(shù)據(jù)庫(kù)中的對(duì)象。它可以在創(chuàng)建模式中的第一個(gè)對(duì)象時(shí)自動(dòng)創(chuàng)建。這樣的對(duì)象可以是任何可以由模式名限定的對(duì)象,如表、索引、視圖、程序包、單值類(lèi)型、函數(shù)或觸發(fā)器。1.1.8 系統(tǒng)目錄表每個(gè)數(shù)據(jù)庫(kù)都包括一組描述數(shù)據(jù)的邏輯和物理結(jié)構(gòu)的系統(tǒng)目錄表。db2為每個(gè)數(shù)據(jù)庫(kù)維護(hù)一大組系統(tǒng)目錄表。這些表包含有關(guān)數(shù)據(jù)庫(kù)對(duì)象(例如,用戶(hù)表、視圖和索引)的定義信息,以及用戶(hù)對(duì)這些對(duì)象所擁有的

9、權(quán)限的安全性信息。它們?cè)跀?shù)據(jù)庫(kù)創(chuàng)建時(shí)被創(chuàng)建,并在常規(guī)操作期間得到更新。不能顯示的創(chuàng)建或卸載下它們,但是可以使用目錄視圖查詢(xún)和查看它們的內(nèi)容。1.2 存儲(chǔ)器對(duì)象下列數(shù)據(jù)庫(kù)對(duì)象用來(lái)定義在系統(tǒng)上存儲(chǔ)數(shù)據(jù)的方式以及改進(jìn)(與存取數(shù)據(jù)相關(guān)的)性能的方法:表空間、容器和緩沖池。1.2.1 表空間數(shù)據(jù)庫(kù)由稱(chēng)為表空間的部件組成。表空間是用來(lái)存儲(chǔ)表的位置。當(dāng)創(chuàng)建表時(shí),您可以決定將特定對(duì)象(如索引和大對(duì)象)數(shù)據(jù)與其余表數(shù)據(jù)分開(kāi)存放。表空間也可以分布在一個(gè)或多個(gè)物理存儲(chǔ)設(shè)備上。圖4顯示了在表空間之間分布數(shù)據(jù)時(shí)具有的一些靈活性。圖4. 表空間將容器分配給表空間。容器是分配的物理存儲(chǔ)器(如文件和設(shè)備)。表空間可以使系統(tǒng)管

10、理空間(sms)或數(shù)據(jù)庫(kù)管理空間(dms)。對(duì)于sms表空間,每個(gè)容器都是操作系統(tǒng)的文件空間中的一個(gè)目錄,由操作系統(tǒng)的文件管理器控制存儲(chǔ)空間。對(duì)于dms表空間,每個(gè)容器或者是固定大小的預(yù)分配文件,或者是物理設(shè)備如磁盤(pán),由數(shù)據(jù)庫(kù)管理程序控制存儲(chǔ)空間。表空間有三種類(lèi)型:規(guī)則、臨時(shí)和長(zhǎng)整數(shù)。包含用戶(hù)數(shù)據(jù)的表存放在規(guī)則表空間中。缺省用戶(hù)表空間名為userspace1。索引也存儲(chǔ)在規(guī)則表空間中。系統(tǒng)目錄表存放在規(guī)則表空間中。缺省系統(tǒng)目錄表空間名為syscatsapce。包含長(zhǎng)整數(shù)字段數(shù)據(jù)或長(zhǎng)整數(shù)對(duì)象數(shù)據(jù)(如多媒體對(duì)象)的表存放在長(zhǎng)整數(shù)表空間中。臨時(shí)表空間分為系統(tǒng)臨時(shí)表空間或用戶(hù)臨時(shí)表空間。系統(tǒng)臨時(shí)表空間

11、用來(lái)存儲(chǔ)sql操作(如排序、重組表、創(chuàng)建索引和連接表)期間所需的內(nèi)部臨時(shí)數(shù)據(jù)。雖然可以創(chuàng)建任意數(shù)目個(gè)系統(tǒng)臨時(shí)表空間,但建議您只適用大多數(shù)表所使用的頁(yè)大小創(chuàng)建一個(gè)。缺省系統(tǒng)臨時(shí)表空間名為tempspace1。用戶(hù)臨時(shí)表空間用來(lái)存儲(chǔ)已說(shuō)明全局臨時(shí)表(已說(shuō)明全局臨時(shí)表存儲(chǔ)的是應(yīng)用程序臨時(shí)數(shù)據(jù))。用戶(hù)臨時(shí)表空間不是在數(shù)據(jù)庫(kù)創(chuàng)建時(shí)缺省創(chuàng)建的。1.2.2 容器容器是物理存儲(chǔ)設(shè)備。它可以由目錄名、設(shè)備名或文件名標(biāo)識(shí)。將為表空間分配容器。單個(gè)表空間可以橫跨多個(gè)容器,但每個(gè)容器只能屬于一個(gè)表空間。圖5舉例說(shuō)明了表與數(shù)據(jù)庫(kù)中的表空間、相關(guān)聯(lián)的容器和磁盤(pán)之間的關(guān)系。圖5. 表空間、相關(guān)聯(lián)的容器和磁盤(pán)之間的關(guān)系emp

12、loyee、department和project表在humanres表空間中,該表空間橫跨容器0、1、2、3和4。此示例顯示每個(gè)容器存在于不同的磁盤(pán)上。任何表的數(shù)據(jù)都以循環(huán)方式存儲(chǔ)在表空間中的所有容器中。這能在屬于給定表空間容器之間平衡數(shù)據(jù)。數(shù)據(jù)庫(kù)管理程序在使用另一個(gè)容器之前寫(xiě)入一個(gè)容器的頁(yè)數(shù)稱(chēng)為數(shù)據(jù)塊大小。1.2.3 緩沖池緩沖池指的是從磁盤(pán)讀去高速緩存表和索引數(shù)據(jù)頁(yè)時(shí)或修改它們時(shí)分配給它們的主存儲(chǔ)器。緩沖池的目的是改進(jìn)系統(tǒng)性能。從內(nèi)存存取數(shù)據(jù)要比從磁盤(pán)存取數(shù)據(jù)塊的多;因此,數(shù)據(jù)庫(kù)管理程序需要讀寫(xiě)(i/o)的次數(shù)越少,性能也越好。(可以創(chuàng)建多個(gè)緩沖池,雖然在大多數(shù)情況下只需要一個(gè)。)因?yàn)榭梢?/p>

13、縮短慢速i/o所造成的延遲,所以緩沖池的配置是最重要的調(diào)整項(xiàng)目。 2 表空間存儲(chǔ)在存儲(chǔ)管理上,aix系統(tǒng)采用邏輯卷管理策略。一個(gè)設(shè)備(邏輯卷)可以跨越多個(gè)磁盤(pán),這就為并行讀寫(xiě)創(chuàng)造了可能。目錄表空間和日志表空間均存儲(chǔ)在文件系統(tǒng)中,而數(shù)據(jù)表空間的存儲(chǔ)類(lèi)型通常是裸設(shè)備。一個(gè)表空間使用一個(gè)或多個(gè)設(shè)備(文件系統(tǒng)或裸設(shè)備)。2.1 aix系統(tǒng)存儲(chǔ)管理簡(jiǎn)介在aix系統(tǒng)中,文件系統(tǒng)是建立在邏輯卷上的,邏輯卷是屬于一個(gè)卷組的,卷組是由實(shí)際的物理磁盤(pán)組成,邏輯卷在實(shí)際物理硬盤(pán)中可以不連續(xù),它可以跨越多個(gè)物理硬盤(pán)而存在。aix系統(tǒng)中物理與邏輯區(qū)段的映射如圖6所示圖6. 物理到邏輯區(qū)段的映射在邏輯上,邏輯卷存在于卷組

14、中,而在物理上,它存在于物理卷上,物理卷是硬盤(pán)。硬盤(pán)的界面分為5個(gè)同心區(qū)域:外邊緣(outer-edge)、外中間(outer-middle)、中央(center)、內(nèi)中間(inner-middle)和內(nèi)邊緣(inner-edge),如圖7所示。由于磁盤(pán)機(jī)械裝置的物理移動(dòng),邊緣(edge)區(qū)域的搜索時(shí)間最長(zhǎng)。邏輯卷位于哪個(gè)區(qū)域上,對(duì)于邏輯卷的讀寫(xiě)效率影響很大。其中,中央(center)區(qū)域是磁盤(pán)搜索時(shí)間最短和訪(fǎng)問(wèn)速度最快的。通常,把經(jīng)常要訪(fǎng)問(wèn)的邏輯卷放在磁盤(pán)的中央?yún)^(qū)域,把很少訪(fǎng)問(wèn)的邏輯卷放在磁盤(pán)的邊緣(edge)區(qū)域,其它邏輯卷放在磁盤(pán)的中間(middle)區(qū)域。圖7. 硬盤(pán)的分布2.2 裸設(shè)

15、備vs文件系統(tǒng)數(shù)據(jù)庫(kù)的物理實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的運(yùn)行時(shí)性能至關(guān)重要,物理實(shí)現(xiàn)更多的需要考慮硬件和系統(tǒng)平臺(tái)。整合庫(kù)部署在一臺(tái)1900 mhz*4cpu,16gb內(nèi)存的ibm小型機(jī)上,操作系統(tǒng)是ibm aix 5.3,數(shù)據(jù)庫(kù)管理系統(tǒng)是db2 v9.1。數(shù)據(jù)庫(kù)服務(wù)器的性能通常是通過(guò)事務(wù)吞吐量和應(yīng)用程序響應(yīng)時(shí)間來(lái)測(cè)量的,該性能主要取決于i/o子系統(tǒng)的性能。為了獲得最大可能的i/o吞吐量,數(shù)據(jù)庫(kù)管理員和系統(tǒng)管理員需要特別注意數(shù)據(jù)庫(kù)表數(shù)據(jù)的布局。在aix系統(tǒng)中通常有兩種數(shù)據(jù)存儲(chǔ)形式:裸設(shè)備、文件系統(tǒng)。裸設(shè)備,也叫裸分區(qū)(原始分區(qū)),是一種沒(méi)有經(jīng)過(guò)格式化,不被unix通過(guò)文件系統(tǒng)來(lái)讀取的特殊字符設(shè)備。它由應(yīng)用程序負(fù)

16、責(zé)對(duì)它進(jìn)行讀寫(xiě)操作。不經(jīng)過(guò)文件系統(tǒng)的緩沖。因?yàn)槭褂寐阍O(shè)備避免了再經(jīng)過(guò)aix操作系統(tǒng)這一層,數(shù)據(jù)庫(kù)管理系統(tǒng)直接讀寫(xiě)硬盤(pán),所以使用裸設(shè)備對(duì)于讀寫(xiě)頻繁的數(shù)據(jù)庫(kù)應(yīng)用來(lái)說(shuō),可以極大地提高數(shù)據(jù)庫(kù)系統(tǒng)的性能。當(dāng)然,這是以磁盤(pán)的i/o非常大,磁盤(pán)i/o已經(jīng)成為系統(tǒng)瓶頸的情況下才成立。如果磁盤(pán)讀寫(xiě)確實(shí)非常頻繁,以至于磁盤(pán)讀寫(xiě)成為系統(tǒng)瓶頸的情況成立,那么采用裸設(shè)備確實(shí)可以大大提高性能。db2數(shù)據(jù)庫(kù)有三種表空間:目錄表空間、數(shù)據(jù)表空間和日志表空間。目錄表空間和日志表空間均存儲(chǔ)在文件系統(tǒng)中,而數(shù)據(jù)表空間的存儲(chǔ)類(lèi)型是基于實(shí)際情況和以往的開(kāi)發(fā)經(jīng)驗(yàn)來(lái)決定。在我們的系統(tǒng)中,在etl的任何一個(gè)階段都要求高速的磁盤(pán)i/o,尤其是

17、數(shù)據(jù)抽取、匹配存儲(chǔ)過(guò)程和數(shù)據(jù)導(dǎo)入整合區(qū)存儲(chǔ)過(guò)程這三個(gè)過(guò)程,需要大批量的數(shù)據(jù)讀取或?qū)懭?,磁盤(pán)i/o是整合庫(kù)系統(tǒng)性能的瓶頸。根據(jù)經(jīng)驗(yàn),數(shù)據(jù)表空間將采用裸設(shè)備的存儲(chǔ)方式。于是,整合庫(kù)的物理實(shí)現(xiàn)如下表所示。通常的系統(tǒng)可以采用這種模式。邏輯結(jié)構(gòu)db2表空間邏輯設(shè)備/文件系統(tǒng)空間大小備注目錄表空間syscatspace/db2_tag3gb文件系統(tǒng)數(shù)據(jù)處理區(qū)tbsptemp/dev/rdb2tbsptemplv/dev/rdb2tbsptemp2lv10gb10gb裸設(shè)備代碼對(duì)應(yīng)區(qū)tbspinte/dev/rdb2tbspintelv20gb裸設(shè)備整合區(qū)日志表空間/intedb_log20gb文件系統(tǒng)2.

18、3 系統(tǒng)管理vs數(shù)據(jù)庫(kù)管理圖8. 表空間類(lèi)型比較:系統(tǒng)管理和數(shù)據(jù)庫(kù)管理2.4 如何合理創(chuàng)建表空間設(shè)備2.4.1 原則1. 一個(gè)表空間跨多個(gè)物理磁盤(pán),以獲得更好的i/o并行性2. 根據(jù)重要性不同,讓表空間分布于磁盤(pán)的不同位置 索引、重要數(shù)據(jù)位于中心 將次重要數(shù)據(jù)、文件系統(tǒng)放在中間和邊緣2.4.2 表空間容器的創(chuàng)建方法按以下說(shuō)明創(chuàng)建邏輯卷,并根據(jù)設(shè)備的重要性依次創(chuàng)建(首先創(chuàng)建最重要的),可以保證最重要的位于中央,按重要性依次往外排列,可以做到讀寫(xiě)性能最優(yōu)。1. smit lv2. 選擇多個(gè)物理盤(pán)(physical volume names),界面如圖9所示。移動(dòng)光標(biāo),用esc+7選擇多塊物理磁盤(pán)p

19、v。圖9. 創(chuàng)建邏輯卷時(shí)選擇多個(gè)物理盤(pán)3. 在logical volume type中輸入raw,即裸設(shè)備類(lèi)型。4. 物理盤(pán)區(qū)域(position on physical volume)選擇center,將范圍(range of physical volumes)選擇最大(maximum)。如圖10所示。圖10. 使邏輯卷位于中央2.4.3整合數(shù)據(jù)庫(kù)表空間設(shè)備情況整合數(shù)據(jù)庫(kù)在創(chuàng)建表空間設(shè)備時(shí)完全遵循了2.4.1節(jié)中的原則。在創(chuàng)建邏輯卷時(shí)按照?qǐng)D9所示創(chuàng)建,保證了一個(gè)設(shè)備跨越多個(gè)物理磁盤(pán)(盡可能多),以獲得更好的i/o并行性。并且,嚴(yán)格按照重要性降低的次序作為創(chuàng)建邏輯卷的順序。圖11顯示的是整合數(shù)

20、據(jù)庫(kù)在磁盤(pán)hdiskpower8上的設(shè)備創(chuàng)建情況。由圖中看出,整合數(shù)據(jù)庫(kù)嚴(yán)格遵循了設(shè)備按照重要性分布的原則: 索引、重要數(shù)據(jù)位于中心 將次重要數(shù)據(jù)、文件系統(tǒng)放在中間和邊緣圖11. 設(shè)備按照重要性分布2.5 建庫(kù)語(yǔ)句參考統(tǒng)計(jì)分析系統(tǒng)數(shù)據(jù)庫(kù)部分建庫(kù)語(yǔ)句:-創(chuàng)建數(shù)據(jù)庫(kù)在一個(gè)2g的文件系統(tǒng)/anly_tagdb2 create database anly on /anly_tag alias anly using codeset gbk territory cn collate using system-創(chuàng)建bufferpooldb2 connect to anly user db2admindb2

21、create bufferpool tmpbf32k immediate size 32000 pagesize 32k-創(chuàng)建數(shù)據(jù)表空間(8g*4)并指定相應(yīng)的bufferpooldb2 create tablespace tbspanly pagesize 32 k managed by database using (device /dev/ranlytbsplv 262144) bufferpool tmpbf32kdb2 alter tablespace tbspanly add(device /dev/ranlytbsplv2 262144)db2 alter tablespace

22、tbspanly add(device /dev/ranlytbsplv3 262144)db2 alter tablespace tbspanly add(device /dev/ranlytbsplv4 262144)-創(chuàng)建系統(tǒng)臨時(shí)表空間(2g的文件系統(tǒng)/anly_tmp/tmp)并指定相應(yīng)的bufferpooldb2 create system temporary tablespace tbsptmp32k pagesize 32k managed by system using (/anly_tmp/tmp) extentsize 8 prefetchsize 16 bufferpoo

23、l tmpbf32k-修改日志文件大小為25000*4kdb2 update db cfg for anly using logfilsiz 25000db2 update db cfg for anly using logprimary 20db2 update db cfg for anly using logsecond 50db2 update db cfg for anly using newlogpath /anly_log-修改表空間大小db2 alter tablespace tbsptemp drop (device /dev/rdb2tbsptemp2lv)db2 alte

24、r tablespace tbsptemp resize (device /dev/rdb2tbsptemp3lv 327680)3 緩沖池和表空間3.1 緩沖池通常,為每一頁(yè)面大小的系統(tǒng)臨時(shí)表空間建立一個(gè)緩沖池就足夠了。因?yàn)樵诰彌_池管理方面,我們完全可以信任db2。如果想在這方面繼續(xù)提高性能,則可以參考本節(jié)的文字。db2在其緩沖池的自我調(diào)優(yōu)方面十分擅長(zhǎng),并且會(huì)將經(jīng)常被訪(fǎng)問(wèn)的行放入內(nèi)存,因此一個(gè)緩沖池就足夠了。(這一選擇也避免了管理多個(gè)緩沖池的復(fù)雜性。)如果時(shí)間允許,并且需要進(jìn)行改進(jìn),那么可能需要使用多個(gè)緩沖池。其思想是將訪(fǎng)問(wèn)最頻繁的行放入一個(gè)緩沖池中。在那些隨機(jī)訪(fǎng)問(wèn)或者很少訪(fǎng)問(wèn)的表之間共享一

25、個(gè)緩沖池可能會(huì)給緩沖池帶來(lái)“污染”,因?yàn)橛袝r(shí)候要為一個(gè)本來(lái)可能不會(huì)再去訪(fǎng)問(wèn)的行消耗空間,甚至可能將經(jīng)常訪(fǎng)問(wèn)的行擠出到磁盤(pán)上。如果將索引保留在它們自己的緩沖池中,那么在索引使用頻繁的時(shí)候(例如,索引掃描)還可以顯著地提高性能。這與我們對(duì)表空間的討論是緊密聯(lián)系的,因?yàn)橐鶕?jù)表空間中表的行為來(lái)分配緩沖池。如果采用多緩沖池的方法,采用4個(gè)緩沖池比較合適:1. 一個(gè)中等大小的緩沖池,用于臨時(shí)表空間。2. 一個(gè)大型的緩沖池,用于索引表空間。3. 一個(gè)大型的緩沖池,用于那些包含經(jīng)常要訪(fǎng)問(wèn)的表的表空間。4. 一個(gè)小型的緩沖池,用于那些包含訪(fǎng)問(wèn)不多的表、隨機(jī)訪(fǎng)問(wèn)的表或順序訪(fǎng)問(wèn)的表的表空間。3.2 緩沖池大小緩沖

26、池大小需要綜合考慮系統(tǒng)內(nèi)存和服務(wù)器工作負(fù)載情況而定。通常,oltp類(lèi)型分配75%的可用內(nèi)存;olap類(lèi)型分配50%的可用內(nèi)存,將剩下的50%分配給sortheap。緩沖池對(duì)應(yīng)于系統(tǒng)的內(nèi)存空間,所以千萬(wàn)不要為緩沖池分配多于所能提供的內(nèi)存,否則就會(huì)招致代價(jià)不菲的os內(nèi)存分頁(yè)。通常來(lái)講,如果沒(méi)有進(jìn)行監(jiān)控,要想知道一開(kāi)始為每個(gè)緩沖池分配多少內(nèi)存是十分困難的。對(duì)于oltp類(lèi)型的工作負(fù)載,一開(kāi)始將75%的可用內(nèi)存分配給緩沖池比較合適。對(duì)于olap/dss,經(jīng)驗(yàn)法則告訴我們,應(yīng)該將50%的可用內(nèi)存分配給一個(gè)緩沖池(假設(shè)只有一種頁(yè)面大小),而將剩下的50%分配給sortheap。3.3 表空間頁(yè)大小及容器分布

27、在頁(yè)大小足以容納一條記錄的前提下,隨機(jī)更新操作,傾向于用較小的頁(yè)大??;而對(duì)于一次訪(fǎng)問(wèn)大量行的操作,較大的頁(yè)大小可以提供更好的性能。每個(gè)表空間應(yīng)該跨越多個(gè)物理磁盤(pán)。以獲得更好的i/o并行性。為了創(chuàng)建一個(gè)表,必須有一個(gè)表空間,其頁(yè)面大小應(yīng)足以容納一行。您可以選擇使用 4、8、16或32kb這幾種頁(yè)面大小。有時(shí)候必須使用較大的頁(yè)面大小,以回避某些數(shù)據(jù)庫(kù)管理器的限制。例如,表空間的最大尺寸與表空間的頁(yè)面大小成比例。如果使用4k的頁(yè)面大小,那么表空間的大?。總€(gè)分區(qū))最大是64gb,如果使用32k的頁(yè)面大小,那么最大是512gb。對(duì)于執(zhí)行隨機(jī)更新操作的oltp應(yīng)用程序,采用較小的頁(yè)面大小更為可取,因?yàn)檫@

28、樣消耗的緩沖池中的空間更少。對(duì)于要一次訪(fǎng)問(wèn)大量連續(xù)行的olap應(yīng)用程序,通常使用較大頁(yè)面大小效果會(huì)更好些,因?yàn)檫@樣可以減少在讀取特定數(shù)量的行時(shí)發(fā)出的i/o請(qǐng)求的數(shù)量。較大的頁(yè)面大小還允許您減少索引中的層數(shù),因?yàn)樵谝豁?yè)中可以保留更多的行指針。然而,也有例外情況。如果行長(zhǎng)度小于頁(yè)面大小的255分之1,則每一頁(yè)中都將存在浪費(fèi)的空間,因?yàn)槊宽?yè)最多只能有255行(對(duì)于索引數(shù)據(jù)頁(yè)不適用)。在這種情況下,采用較小的頁(yè)面大小或許更合適一些。3.4 系統(tǒng)臨時(shí)表空間為每種頁(yè)面大小的表空間,建立一個(gè)系統(tǒng)臨時(shí)表空間,通常使用文件系統(tǒng),大小根據(jù)排序和重組事物的大小確定。對(duì)于所使用的每種頁(yè)面大小,必須存在一個(gè)具有匹配頁(yè)面

29、大小的系統(tǒng)臨時(shí)表空間(以支持排序和重組)。然后將所有享用匹配頁(yè)面大小的表空間指派給具有相同頁(yè)面大小的緩沖池。如果對(duì)性能還有更苛刻的要求,并且有時(shí)間投入,那么可以使用dms表空間,并且根據(jù)使用情況來(lái)組織表。另外,還要遵循前面給出的關(guān)于使用多個(gè)緩沖池的建議。對(duì)于每種頁(yè)面大小,創(chuàng)建一個(gè):1. 系統(tǒng)臨時(shí)表空間。2. 用于索引的常規(guī)表空間。3. 用于頻繁訪(fǎng)問(wèn)的表的常規(guī)表空間。4. 用于訪(fǎng)問(wèn)不多的表、隨機(jī)訪(fǎng)問(wèn)的表以及順序訪(fǎng)問(wèn)的表的常規(guī)表空間。5. 用于 lob 數(shù)據(jù)的大型表空間。3.5 區(qū)段大小和預(yù)取大小區(qū)段大?。╡xtent size)和預(yù)取大?。╬refetch size)是表空間的參數(shù),對(duì)于數(shù)據(jù)存取

30、性能至關(guān)重要。區(qū)段大小跟表空間中表的平均大小有一定的比例關(guān)系,通常表越大,區(qū)段大小也越大。如果表空間駐留在磁盤(pán)陣列上,則區(qū)段大小應(yīng)設(shè)置成條紋大小。預(yù)取大小通過(guò)公式確定:prefetch size = (# containers of the table space on different physical disks) * extent size。磁盤(pán)陣列的情況:prefetch size = extent size * (# of non-parity disks in array)。3.5.1 區(qū)段大小extent size指定在跳到下一個(gè)容器之前,可以寫(xiě)入到一個(gè)容器中的pagesize

31、頁(yè)面的數(shù)量,這個(gè)參數(shù)是在創(chuàng)建表空間時(shí)定義的(之后不能輕易修改)。處理較小的表時(shí),使用較小的區(qū)段效率會(huì)更高一些。下面的經(jīng)驗(yàn)法則是建立在表空間中每個(gè)表的平均大小的基礎(chǔ)上的:1. 如果小于25mb,extent size為82. 如果介于25到250mb之間,則extent size為163. 如果介于250mb到2gb之間,則extent size為324. 如果大于2gb,則extent size為64對(duì)于olap數(shù)據(jù)庫(kù)和大部分都要掃描(僅限于查詢(xún))的表,或者增長(zhǎng)速度很快的表,應(yīng)使用較大的值。如果表空間駐留在一個(gè)磁盤(pán)陣列上,則應(yīng)將區(qū)段大小設(shè)置成條紋大?。ㄒ簿褪钦f(shuō),寫(xiě)入到陣列中一個(gè)磁盤(pán)上的數(shù)據(jù))。

32、3.5.2 預(yù)取大小對(duì)于預(yù)取大小,可以通過(guò)使用alter tablespace輕易地修改。最優(yōu)設(shè)置差不多是這樣的:prefetch size = (# containers of the table space on different physical disks) * extent size。如果表空間駐留在一個(gè)磁盤(pán)陣列上,則設(shè)置如下:prefetch size = extent size * (# of non-parity disks in array)。4 提高sql語(yǔ)句執(zhí)行效率4.1 建立索引使用索引實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)的高效訪(fǎng)問(wèn)。但是需要知道每個(gè)索引都會(huì)給數(shù)據(jù)庫(kù)更新帶來(lái)額外的開(kāi)銷(xiāo)。這就意

33、味著,低效的索引會(huì)給數(shù)據(jù)庫(kù)帶來(lái)災(zāi)難。對(duì)于數(shù)據(jù)庫(kù),我們必須關(guān)注關(guān)鍵數(shù)據(jù)的讀取,為他們提供最高效的訪(fǎng)問(wèn)路徑。對(duì)此,基本策略就是建立索引。在索引提供高效訪(fǎng)問(wèn)的同時(shí),也帶來(lái)了額外的系統(tǒng)開(kāi)銷(xiāo)。開(kāi)銷(xiāo)分為磁盤(pán)空間的開(kāi)銷(xiāo)和處理器開(kāi)銷(xiāo)。下面我們討論一下處理器開(kāi)銷(xiāo)。每當(dāng)在表中插入或刪除記錄時(shí),該表的所有索引必須進(jìn)行相應(yīng)調(diào)整。每當(dāng)對(duì)已建立索引的字段進(jìn)行更新時(shí),這種調(diào)整也會(huì)發(fā)生。舉例子說(shuō),如果在未建立索引的表中插入數(shù)據(jù)需要100個(gè)單位時(shí)間,那么每增加一個(gè)索引就會(huì)增加100到250個(gè)單位時(shí)間。有趣的是,維護(hù)索引的開(kāi)銷(xiāo)與簡(jiǎn)單觸發(fā)器帶來(lái)的開(kāi)銷(xiāo)大致相當(dāng)。在建立索引前線(xiàn)介紹一些最通俗的信息,這些信息來(lái)自developworks

34、,列出這些信息是因?yàn)槲矣X(jué)得這些信息通常情況下是值得參考的:1. 當(dāng)要在一個(gè)合理的時(shí)間內(nèi)結(jié)束查詢(xún)時(shí),應(yīng)避免添加索引,因?yàn)樗饕龝?huì)降慢更新操作的速度并消耗額外的空間。有時(shí)候還可能存在覆蓋好幾個(gè)查詢(xún)的大型索引。2. 基數(shù)較大的列很適合用來(lái)做索引。3. 考慮到管理上的開(kāi)銷(xiāo),應(yīng)避免在索引中使用多于5個(gè)的列。4. 對(duì)于多列索引,將查詢(xún)中引用最多的列放在定義的前面。5. 避免添加與已有的索引相似的索引。因?yàn)檫@樣會(huì)給優(yōu)化器帶來(lái)更多的工作,并且會(huì)降慢更新操作的速度。相反,我們應(yīng)該修改已有的索引,使其包含附加的列。例如,假設(shè)在一個(gè)表的 (c1,c2)上有一個(gè)索引i1。您注意到查詢(xún)中使用了where c2=?,于是又

35、創(chuàng)建一個(gè)(c2)上的索引i2。但是這個(gè)相似的索引沒(méi)有添加任何東西,它只是i1的冗余,而現(xiàn)在反而成了額外的開(kāi)銷(xiāo)。6. 如果表是只讀的,并且包含很多的行,那么可以嘗試定義一個(gè)索引,通過(guò)create index中的include子句使該索引包含查詢(xún)中引用的所有列(被include子句包含的列并不是索引的一部分,而只是作為索引頁(yè)的一部分來(lái)存儲(chǔ),以避免附加的數(shù)據(jù)fetches)。決定是否使用索引,可以重點(diǎn)考慮檢索比率。即,判斷索引有效性的依據(jù),就使用鍵值作唯一性條件檢索出的數(shù)據(jù)的百分比。百分比越低,索引越有效。做出這個(gè)論斷的前提是一些假設(shè),如磁盤(pán)訪(fǎng)問(wèn)的相關(guān)性能。索引鍵值相關(guān)記錄的物理位置是否相鄰也很重要

36、,因?yàn)槭峭ㄟ^(guò)塊來(lái)操作數(shù)據(jù)的。建立了索引之后,如果索引鍵所指向的記錄散布于整個(gè)表中,即使這些記錄在表中占的比率很小,但因?yàn)樗鼈兎稚⒃谡麄€(gè)磁盤(pán)上,所以索引的性能就會(huì)大打折扣。另外值得注意的是,函數(shù)和類(lèi)型轉(zhuǎn)換可能導(dǎo)致索引失效。4.2 采用表分區(qū)db2 v9新增了表分區(qū)功能,分區(qū)技術(shù)可以改進(jìn)大型數(shù)據(jù)庫(kù)的管理。分區(qū)鍵的選擇:讓查詢(xún)很快定位,但盡量避免數(shù)據(jù)庫(kù)操作集中;使海量數(shù)據(jù)表拆分成小表,并使數(shù)據(jù)庫(kù)操作平均分散到表分區(qū)中。分區(qū)在單節(jié)點(diǎn)數(shù)據(jù)庫(kù)上,提高查詢(xún)定位的速度,不提供查詢(xún)并行性。db2 v9新增了表分區(qū)功能,分區(qū)技術(shù)可以改進(jìn)大型數(shù)據(jù)庫(kù)的管理。db2 v9新增了表分區(qū)功能,因此對(duì)一些大表,我們?cè)赿b2

37、v9中不再需要分拆成小表,再用union all視圖的方式進(jìn)行設(shè)計(jì),而是直接用分區(qū)表實(shí)現(xiàn)一些這些功能。表分區(qū)功能是一種數(shù)據(jù)組織方案,即,表數(shù)據(jù)根據(jù)一個(gè)或多個(gè)表列中的值分布到多個(gè)存儲(chǔ)對(duì)象(稱(chēng)為數(shù)據(jù)分區(qū)或范圍)中。每個(gè)數(shù)據(jù)分區(qū)都是單獨(dú)存儲(chǔ)的。這些存儲(chǔ)對(duì)象可以在不同的表空間中,也可以在相同表空間中。很多業(yè)務(wù)數(shù)據(jù)的查詢(xún)包含時(shí)間條件,所以時(shí)間經(jīng)常作為分區(qū)條件。業(yè)務(wù)數(shù)據(jù)在時(shí)間上的分布通常是平均的,所以用時(shí)間分區(qū)的另一個(gè)好處是使包含大型數(shù)據(jù)的表分成大小相當(dāng)?shù)膸讉€(gè)分區(qū),用戶(hù)還可以針對(duì)數(shù)據(jù)量來(lái)制定分區(qū),以控制每個(gè)分區(qū)的數(shù)據(jù)量在一個(gè)可以接受的范圍內(nèi)。在外匯管理局統(tǒng)計(jì)分析子系統(tǒng)中,用戶(hù)的每一次查詢(xún)均包含時(shí)間條件,所

38、以按時(shí)間分區(qū)是一個(gè)很好的選擇。外匯局國(guó)際收支數(shù)據(jù)明細(xì)表每年有2000萬(wàn)數(shù)據(jù),使用時(shí)間一長(zhǎng),數(shù)據(jù)量將非常之大。明細(xì)數(shù)據(jù)按月分區(qū),可以將每個(gè)分區(qū)的數(shù)據(jù)量控制在200萬(wàn)左右,在查詢(xún)時(shí)控制時(shí)間條件在一年內(nèi),這樣可以避免查詢(xún)時(shí)全表掃描帶來(lái)的壓力。但是按照時(shí)間分區(qū)也有弊端。一個(gè)業(yè)務(wù)系統(tǒng),按時(shí)間按分區(qū),當(dāng)前時(shí)間下的分區(qū)插入、刪除、更新或查詢(xún)的操作必定比別的分區(qū)多。這種集中的操作必定給數(shù)據(jù)庫(kù)帶來(lái)巨大的壓力。外匯管理局統(tǒng)計(jì)分析子系統(tǒng)還有另外一個(gè)特點(diǎn):用戶(hù)按照行政區(qū)劃分散,查詢(xún)時(shí)只關(guān)心所在行政區(qū)劃的數(shù)據(jù)。我們就有一種構(gòu)想:可否按照時(shí)間和行政區(qū)劃兩個(gè)條件來(lái)分區(qū)(按月、按省分區(qū))?這一想法剛剛產(chǎn)生,還未執(zhí)行,接下來(lái)打

39、算測(cè)試。分區(qū)鍵的選擇:讓查詢(xún)很快定位,但盡量避免數(shù)據(jù)庫(kù)操作集中;使海量數(shù)據(jù)表拆分成小表,并使數(shù)據(jù)庫(kù)操作平均分散到表分區(qū)中。對(duì)于分區(qū),我們進(jìn)行了一些列測(cè)試,下面就是我們測(cè)試的結(jié)論。分區(qū)在單節(jié)點(diǎn)數(shù)據(jù)庫(kù)上,提高查詢(xún)定位的速度,不提供查詢(xún)并行性。以一年的數(shù)據(jù)量,月分區(qū)為例。首先,考慮查詢(xún)條件中有分區(qū)字段時(shí)的情況。當(dāng)查詢(xún)條件在一個(gè)月內(nèi)時(shí),dbms可以直接定位到某個(gè)分區(qū),在不考慮其他條件時(shí),查詢(xún)速度是不分區(qū)表的12倍。依此類(lèi)推,當(dāng)查詢(xún)條件跨n(n=12)個(gè)月時(shí),查詢(xún)速度是不分區(qū)表的12/n倍。如果,查詢(xún)條件中沒(méi)有分區(qū)字段時(shí),分區(qū)和不分區(qū)查詢(xún)效率相當(dāng)。4.3 減少對(duì)數(shù)據(jù)庫(kù)的更新和刪除操作刪除和更新操作的開(kāi)銷(xiāo)

40、往往比插入高,所以一個(gè)好的設(shè)計(jì)需要減少對(duì)數(shù)據(jù)庫(kù)的更新和刪除操作。數(shù)據(jù)庫(kù)的刪除和更新操作會(huì)帶來(lái)一連串的“附屬操作”:刪除和更新操作都需要記錄日志;都會(huì)帶來(lái)數(shù)據(jù)物理存儲(chǔ)的變化(記錄的移動(dòng));都會(huì)導(dǎo)致數(shù)據(jù)重組(索引重建)等。對(duì)數(shù)據(jù)庫(kù)的更改都會(huì)記錄到日志中,以備回滾之用。所以更新操作和刪除操作的每個(gè)細(xì)節(jié)都會(huì)記錄到日志中。刪除記錄時(shí),數(shù)據(jù)庫(kù)還會(huì)移動(dòng)記錄,以把刪除數(shù)據(jù)留出的空缺補(bǔ)上,索引也會(huì)被重建。更新數(shù)據(jù)庫(kù)時(shí),如果更新了索引字段,則會(huì)導(dǎo)致索引重建,如果更新的是變長(zhǎng)的字段(varchar),則需要移動(dòng)記錄。所以在設(shè)計(jì)時(shí),應(yīng)盡量減少對(duì)數(shù)據(jù)庫(kù)的更新和刪除操作。如果一個(gè)表有多個(gè)字段需要更新,則應(yīng)該把多個(gè)更新寫(xiě)在

41、同一個(gè)sql語(yǔ)句中。將數(shù)據(jù)處理放在一個(gè)較小的臨時(shí)表里進(jìn)行,然后將處理完的數(shù)據(jù)放入大表中,在大表中進(jìn)行數(shù)據(jù)處理(更新操作)是不明智的做法。刪除操作時(shí),如果要?jiǎng)h除一個(gè)表的大量數(shù)據(jù),只保留少量的有效數(shù)據(jù),可以將有效數(shù)據(jù)轉(zhuǎn)移到臨時(shí)表中,然后使用alter table table_name activate not logged initially with empty table來(lái)刪除表中所有記錄,因?yàn)榇嗣畈挥涗浫罩尽?.4 如何使訪(fǎng)問(wèn)更高效本小節(jié)的內(nèi)容很大一部分來(lái)自the art of sql這本書(shū),這本書(shū)里集合了數(shù)據(jù)庫(kù)開(kāi)發(fā)的通用經(jīng)驗(yàn)。雖然沒(méi)有局限于具體的dbms和硬件平臺(tái),但是卻是一本實(shí)踐性很強(qiáng)

42、的書(shū)。1一次連接數(shù)據(jù)庫(kù),做很多事情。直到處理完,才斷開(kāi)連接。2一個(gè)sql語(yǔ)句包含盡量多的操作。形象地說(shuō):幾千個(gè)語(yǔ)句,借助游標(biāo)不斷循環(huán),很慢。換成幾個(gè)語(yǔ)句,處理同樣的數(shù)據(jù),還是很慢。換成一個(gè)語(yǔ)句,解決問(wèn)題,最好。3接近dbms核心。盡量使用數(shù)據(jù)庫(kù)自帶的函數(shù)。減少自定義函數(shù)。因?yàn)樵俾斆鞯臄?shù)據(jù)庫(kù)優(yōu)化器也不認(rèn)識(shí)自定義函數(shù)。4一個(gè)語(yǔ)句不要連接太多的表,建議的上限是5個(gè)。5將頻繁更新的列集中起來(lái):當(dāng)更新某一行時(shí),db2 會(huì)記錄進(jìn)行更改的所有列,因此將頻繁更新的列放到一起可以減少 db2 的記錄工作。這只是一個(gè)有關(guān)性能的小建議,因此不應(yīng)為實(shí)現(xiàn)它而進(jìn)行重大的應(yīng)用程序或數(shù)據(jù)庫(kù)設(shè)計(jì)修改。6如果想了解,如何書(shū)寫(xiě)sq

43、l語(yǔ)句才能更高效,可參考the art of sql。書(shū)中提出了不少有益的見(jiàn)解。5 參數(shù)調(diào)優(yōu)關(guān)于數(shù)據(jù)庫(kù)服務(wù)器的參數(shù)調(diào)優(yōu)包括,操作系統(tǒng)參數(shù)、數(shù)據(jù)庫(kù)管理系統(tǒng)參數(shù)和數(shù)據(jù)庫(kù)參數(shù)的調(diào)優(yōu)。其中操作系統(tǒng)調(diào)優(yōu)的核心在于aix系統(tǒng)的內(nèi)存和cpu的調(diào)優(yōu),旨在提高數(shù)據(jù)庫(kù)對(duì)內(nèi)存和cpu的利用率。db2數(shù)據(jù)庫(kù)的調(diào)優(yōu)分為3個(gè)方面:db2環(huán)境變量、db2實(shí)例參數(shù)和數(shù)據(jù)庫(kù)參數(shù)。旨在提高數(shù)據(jù)庫(kù)的并行性、讀寫(xiě)性能、排序和匯總性能。參數(shù)設(shè)置和參數(shù)調(diào)優(yōu)通常根據(jù)經(jīng)驗(yàn)確定,以下小節(jié)介紹的是整合庫(kù)的參數(shù)設(shè)置。如想了解綜合查詢(xún)系統(tǒng)數(shù)據(jù)庫(kù),可參看查詢(xún)庫(kù)性能調(diào)優(yōu)的參數(shù)調(diào)優(yōu)部分。5.1 aix系統(tǒng)vmo -o maxclient%=20vmo -

44、o maxperm%=20vmo -o minperm%=5這三個(gè)參數(shù)是aix內(nèi)存管理相關(guān)的。下面介紹這三個(gè)參數(shù)。增強(qiáng)jfs文件系統(tǒng)為它的緩沖區(qū)高速緩存使用客戶(hù)機(jī)文件。為了在增強(qiáng)jfs文件系統(tǒng)的高速緩存中建立硬性限制,可以調(diào)諧maxclient的參數(shù)。該參數(shù)代表了可用于緩沖區(qū)高速緩存的客戶(hù)機(jī)頁(yè)面的最大值??梢允褂胿mo -o maxclient命令進(jìn)行更改。maxclient的值顯示為實(shí)內(nèi)存的百分比。在到達(dá)maxclient閾值后,lru開(kāi)始取用最近尚未訪(fǎng)問(wèn)過(guò)的客戶(hù)機(jī)頁(yè)面。如果沒(méi)有足夠的客戶(hù)機(jī)頁(yè)面可以被竊取,lru會(huì)替換掉其它類(lèi)型的頁(yè)。通過(guò)減少maxclient的值,可以阻止增強(qiáng)jfs文件頁(yè)的

45、訪(fǎng)問(wèn)不要替換掉工作存儲(chǔ)頁(yè)面,最小化調(diào)頁(yè)空間的頁(yè)面調(diào)度。另外,maxclient通常應(yīng)該設(shè)置為一個(gè)小于或等于maxperm的值。操作系統(tǒng)通過(guò)把在曾經(jīng)讀寫(xiě)的內(nèi)存頁(yè)留在實(shí)內(nèi)存滿(mǎn)足不同要求。如果文件頁(yè)面在它們的頁(yè)幀被重新分配前被請(qǐng)求,那就節(jié)省了輸入輸出操作。頁(yè)幀使用的文件相對(duì)用于計(jì)算的(工作或程序文本)段的文件的比例是松散地受控于minperm和maxperm的值的:如果ram中文件頁(yè)面所占的百分比高于maxperm,頁(yè)面替換的竊取只用于文件頁(yè)。如果ram中文件頁(yè)面所占的百分比低于minperm,頁(yè)面替換的竊取同時(shí)用于文件頁(yè)和計(jì)算頁(yè)。如果ram中文件頁(yè)面所占的百分比介于minperm和maxperm之

46、間,頁(yè)面替換只竊取文件頁(yè),除非文件頁(yè)的重調(diào)入數(shù)量大于計(jì)算頁(yè)數(shù)。5.2 db2環(huán)境變量db2set db2_pinned_bp=yesdb2set db2_force_fcm_bp=nodb2set db2memmaxfree=1048576db2set db2_mmap_write=nodb2set db2_mmap_read=nodb2set db2_hash_join=ydb2set db2_rr_to_rs=on慎用,請(qǐng)?jiān)敿?xì)了解后再使用以下參數(shù):db2_evaluncommitted=yesdb2_skipdeleted=ondb2_skipinserted=ondb2_parallel

47、_io=yesdb2_pinned_bp:這個(gè)aix和hp-unix平臺(tái)上的變量指定是否數(shù)據(jù)庫(kù)使用的全局內(nèi)存(包括緩沖池的內(nèi)存)將被保留在系統(tǒng)主存儲(chǔ)器以獲得更加穩(wěn)定的數(shù)據(jù)庫(kù)性能。db2memmaxfree:該變量指定每個(gè)db2代理將保留可以用內(nèi)存的數(shù)量;取值范圍從0到2.0e+32字節(jié)。缺省是8,388,608個(gè)字節(jié)。db2_hash_join:指定排序時(shí)使用hash排序,這樣db2在表join時(shí),先對(duì)各表做hash排序,再join,這樣可以大大提高性能。db2_rr_to_rs:該設(shè)置后,不能定義rr隔離級(jí)別,如果定義rr,db2也會(huì)自動(dòng)降為rs。通過(guò)不鎖定插入或者更新行的下一個(gè)鍵,可以改進(jìn)

48、并發(fā)性,提高性能。db2_evaluncommitted:這個(gè)參數(shù)將在記錄鎖之前進(jìn)行謂詞檢查,盡量減少鎖的時(shí)間。對(duì)于v8,從v8.1 fp9(也即v8.2 fp2)開(kāi)始,最佳的設(shè)置是=yes_deferiscanfetch。對(duì)于 v9,只需指定=yes。db2_skipdeleted:這個(gè)參數(shù)將新insert且沒(méi)有提交的數(shù)據(jù)跳過(guò);例如,select/update語(yǔ)句不會(huì)發(fā)現(xiàn)這條記錄。db2_skipinserted:這個(gè)參數(shù)將新delete且沒(méi)有提交的數(shù)據(jù)跳過(guò);例如,select/update語(yǔ)句不等待這條記錄的提交,并且認(rèn)為他已經(jīng)被刪除了。db2_parallel_io:允許表空間的并行i/o。5.3 db2數(shù)據(jù)庫(kù)實(shí)例參數(shù)db2 update dbm cfg using federated yesdb2 update dbm cfg using sheapthres 200000db2 update dbm cfg using aslheapsz 120db2 update dbm cfg using maxagents 200(連接進(jìn)程數(shù))db2 update dbm cfg using num_poolagents 30federated:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論