qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          DB2性能問題分類與分析思路

            DML 性能問題

            DML(Data Manipulation Language) 包括了查詢,增加,刪除和更新紀(jì)錄等操作。

            首先看一下查詢的性能問題,在查詢一張表或多張表的聯(lián)合查詢時(shí)有時(shí)反應(yīng)時(shí)間會(huì)比較長(zhǎng),這使得用戶難以忍受。針對(duì)這種問題,可以通過下述方法來分析:

            在查詢的連接或條件子句中的相關(guān)字段是否加了索引。 ( 關(guān)于 SQL 的優(yōu)化可以參見 SQL 優(yōu)化相關(guān)文章,本文不再贅述 ) 。

            察看緩沖池的大小,緩沖池太小會(huì)造成很多數(shù)據(jù)不能讀到緩沖池而直接從硬盤上讀取,造成很大的瓶頸。另一方面關(guān)于緩沖池預(yù)取的設(shè)置,一般能將預(yù)取大小 (PREFETCHSIZE) 設(shè)定為區(qū)段大小與容器個(gè)數(shù)的積,這樣可以最大利用到預(yù)取的并行性。

            在查詢中涉及到 order by 字句時(shí),如果排序的字段沒有設(shè)置索引那么排序?qū)?huì)用到內(nèi)存中的排序堆 (sortheap) 。如果排序堆過小會(huì)造成排序溢出到硬盤上 (Overflowed) 造成性能衰退。

            同時(shí)還要考慮到 RUNSTATS/REORG 因素。 RUNSTATS 命令可以更新表中的統(tǒng)計(jì)信息。當(dāng)表中的數(shù)據(jù)經(jīng)過頻繁的增刪改后其相應(yīng)的統(tǒng)計(jì)信息會(huì)發(fā)生變化,而優(yōu)化器選擇執(zhí)行計(jì)劃的時(shí)候是根據(jù)這種統(tǒng)計(jì)信息來計(jì)算的,所以 運(yùn)行 RUNSTATS 此時(shí)顯得尤為重要。 REORG 可以整理數(shù)據(jù)存儲(chǔ)的物理結(jié)構(gòu),也能減少數(shù)據(jù)掃描的時(shí)間,提高查詢的性能。

            從存儲(chǔ)方面應(yīng)當(dāng)注意的是選取裸設(shè)備的 DMS 要比 SMS 性能要好,因?yàn)樗倭艘粚游募到y(tǒng)的緩沖而直接訪問緩沖池。

            學(xué)會(huì)使用 optimize for n rows 子句,它可以提高前面 n 條記錄的顯示速度。這樣可以使用戶能夠先快速查看這 n 條記錄,然后再看其他紀(jì)錄。減少了用戶的等待時(shí)間。

            物化查詢表 (MQT) 也是提高查詢性能的一種手段,它可以將經(jīng)常用到的查詢結(jié)果集存儲(chǔ)到一張中間表中,在查詢時(shí)減少了數(shù)據(jù)檢索的時(shí)間。

            在架構(gòu)上采用 MPP 或 SMP 也是提高查詢或?qū)懖僮餍阅艿氖侄巍?/p>

            針對(duì)復(fù)雜查詢時(shí)可以將數(shù)據(jù)庫配置參數(shù) DFT_QUERYOPT( 缺省查詢優(yōu)化類 ) 的值設(shè)得高一些(7 或 9),針對(duì)簡(jiǎn)單查詢可以將它設(shè)得低一些 (3 或 5),因?yàn)樵O(shè)置越高優(yōu)化器所作的分析就越深入,耗費(fèi)在生成計(jì)劃上的時(shí)間就越多。

            針對(duì) C/S 結(jié)構(gòu)的查詢可以將查詢語句寫在服務(wù)器端生成存儲(chǔ)過程來減少數(shù)據(jù)的網(wǎng)絡(luò)傳輸以及客戶端的壓力。而經(jīng)過編譯的存儲(chǔ)過程執(zhí)行得更加高效。

            還要考慮到隔離級(jí)別與鎖的因素,隔離級(jí)別越高越能保證數(shù)據(jù)的完整性,但同時(shí)會(huì)減弱并發(fā)性。這一點(diǎn)需要權(quán)衡需求而定。

            網(wǎng)絡(luò)因素也不可忽視,將數(shù)據(jù)庫服務(wù)器參數(shù) RQRIOBLK 設(shè)為 65534 可以相應(yīng)地提高網(wǎng)絡(luò)吞吐量。(缺省值 32767)

            最后需要考慮的是數(shù)據(jù)庫的結(jié)構(gòu),在某些情況下,在某些表中增加一些冗余字段雖然犧牲了一些空間和維護(hù)成本,但是在查詢時(shí)可以減少很多連接操作,這樣可以大大提高查詢性能。就是用空間換取時(shí)間。

            接下來看一下增刪改的性能優(yōu)化方法:

            首先是索引因素,在做增刪改時(shí)數(shù)據(jù)庫會(huì)對(duì)表中的索引做相應(yīng)的修改。這會(huì)消耗一定的資源,所以在保證數(shù)據(jù)完整性的前提下可以先將索引刪除,待到增刪改結(jié)束后再重建這些索引。這也會(huì)節(jié)省一些時(shí)間。將索引和數(shù)據(jù)放在不同的硬盤上也可以增加寫操作的并行性。

            其次要考慮日志因素,在數(shù)據(jù)寫操作的同時(shí),數(shù)據(jù)庫系統(tǒng)也在維護(hù)著事務(wù)日志,所以應(yīng)盡量減少日志維護(hù) 的代價(jià)。將 auto commit 設(shè)為 false,可以減少提交的次數(shù)(同時(shí)也減少了寫日志的次數(shù))。增大 LOGBUFSZ,LOGFILSZ 可以減少刷新日志的次數(shù)以及日志文件切換的次數(shù)。或者將表的屬性改為” ACTIVATE NOT LOGGED INITIALLY ” , 這樣可以屏蔽表的日志操作,以提高寫操作的性能,但是失去事務(wù)日志的表的數(shù)據(jù)很難修復(fù),這一點(diǎn)需要權(quán)衡。

            將日志和數(shù)據(jù)分別放在不同的硬盤上也可以增加寫操作的并行性。

            在插入記錄時(shí)采用 APPEND MODE 可以消除 DB2 尋找表中間的空余空間的時(shí)間而直接插到表尾,從而提高插入的性能。

            關(guān)于并行性的因素,采用 MPP 模式可以使用并行處理的方式增加寫操作的性能。將容器分散在不同的硬盤上也可以增加寫操作的性能。

            還要考慮到約束和觸發(fā)器的影響,在寫操作時(shí)應(yīng)當(dāng)盡量避免表中有約束和觸發(fā)器。在保證數(shù)據(jù)完整性的前提下可在頻繁大批量寫操作時(shí)先將約束或觸發(fā)器去除,完畢后重建。

            和查詢一樣,寫操作同樣要考慮到隔離級(jí)別和鎖的因素(參見查詢優(yōu)化部分)。

            在 insert 語句中包括多行可以減少客戶機(jī) - 服務(wù)器通信次數(shù),提高插入性能。如:insert into table1 values (1, ’ a ’ ),(2, ’ b ’ ),(3, ’ c ’ ) 。

            還有一個(gè)需要考慮的因素是 DB2 V95 在 UNIX 上的采用線程模型,在操作系統(tǒng)中的開銷變小,使得寫操作性能要比之前的 DB2 的版本要好。

          posted on 2011-10-14 17:19 順其自然EVO 閱讀(150) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 乾安县| 滦南县| 屏东县| 庆安县| 辽宁省| 江城| 桐梓县| 清水河县| 绥德县| 霍山县| 罗定市| 静宁县| 西城区| 宿州市| 宁国市| 沁阳市| 吉首市| 安乡县| 阳信县| 河南省| 磴口县| 汾西县| 固安县| 改则县| 娄底市| 邢台县| 安塞县| 铜梁县| 长沙市| 滨海县| 寻甸| 商水县| 河东区| 滨州市| 平塘县| 尚义县| 铁力市| 隆回县| 宜宾县| 玉门市| 甘德县|