中國代碼網

基本性能調整(翻譯)

發表時間:2008-02-13 09:53

溫馨提示:您可以點擊下面的鏈接閱讀或打印基本性能調整(翻譯)全文。

更多

基本性能調整

Roger Sanders

笑熬漿糊

 

原文出處:《DB2 Magazine Quarter 3, 2003 · Vol. 8, Issue 3

英文原文(由于文章翻譯未經授權,請在轉載時保留原文鏈接)

 

你的平臺--明確的指明從DB2 UDB中可以取得很好的性能

 

DB2 UDB 81 FOR LINUX UNIXWINDOWS 的版本可以存在與簡單的單一的系統上,也可以在存在與在各種平臺上運行的、復雜的客戶-服務器環境里。但是不論是什么環境,用戶總是傾向于關心這樣一個問題:數據庫應用程序的性能。那么什么是性能,怎么樣才能改善它?

 

簡單地說,性能就是反映計算機系統執行一項指定的任務時候的具體表現。它主要用于測量系統響應時間、計算能力和可用性。 每一個度量都可能受幾個因素影響,包括硬件、系統(和數據庫) 配置、類型和同時工作的用戶數量,以及每一個用戶應用程序的負載。

 

如果系統執行效率低,你通常可以有幾個調整的方法可供選擇。由于有不同的選擇,你總是傾向于選擇一種被組織化的,簡明的方式,在心里有一個具體的目標;并且那個目標應該是現實的,定量的,而且還是可以測量的; 否則,性能調整將會變成為一個hit-or-miss exercise.(注:原文如此,我不知道該怎么解釋所以保留原文)

 

那么, DBA 應該從哪里開始呢? 通過對一個數據庫的觀察,性能問題比較典型的出現從在下列的一個或更多因素的不足上:

  • 系統(環境) 配置
  • 實例配置
  • 數據庫配置
  • 數據庫設計
  • 應用程序設計。

關注你上述的每個要素的最初的調整效果,讓他們在每一個因素下逐步的運轉,直到得到你所期望的那些性能。 在這一章節中,我將描述怎么檢查Linux Unix ,和windows平臺系統環境配置。 在后續章節將覆蓋到剩余的部分。 在具體介紹之前,雖然,我將介紹一些適合于所有平臺的相關的調整指南。

一般性的調整規則

如果在你開始之前你能夠關注一下這些指南,那么你將要調整的項目將會是更加容易和更可能會成功。

 

1. 檢查已知的硬件和軟件問題。 一些性能問題可能通過簡單地更新軟件補丁包或者升級硬件來改正。 既然有可能通過一個簡單的service pack來解決問題那為何要浪費時間和精力去檢查調整系統中的其它部分呢?也就是說,在你決定升級硬件之前請確定你已經了解問題的所在。在你發現系統實際上需要更多內存之前去盲目的增加其它網絡接口卡將會付出昂貴的代價,它實際上是不會對改進性能有任何作用的。

 

2. 基于整個系統考慮。 通常,如果沒有在這個系統的至少一個部件上起作用的話,你就不能調整這個系統的任何一方面。 例如,如果你為DB2 數據庫管理器的后臺進程預留出很大一塊內存空間,那么你不會有足夠的剩余空間去執行你的存儲過程。所以,在你做改變之前,應該整體去考慮這些改變將會對系統造成什么樣的影響。

 

3. 根據不同的級別去做測量和重新配置。不要在一次調整當中改變一個系統級別以上。 即使你確定你的計劃是有益的,你將不得不評估每一個改變會對性能改善的結果產生多大的貢獻。 如果你做錯了,性能則有降無升,這樣你就無法知道是哪項變動使它產生了負面的影響。在數據庫服務器環境里,以下是可以作為獨立考慮的級別: 硬件、操作系統、通信軟件、數據庫、SQL 語句以及應用程序。

 

4. 每次改變一件事。 因為同樣原因你應該每次只調整一個系統級別,當你調整每一個系統級別你應該每次只改變一個要素(注冊表變量、實例配置變量、數據庫配置變量、等等)

 

5. 在開始之前請將你的跟蹤和反饋程序放置就位。性能的調整不是一門具體的學科。 你做的一些變動將會損害而不是有助于性能。 如果這樣情況發生,如果你有辦法撤銷每一次所作的變動你就可以花費較少時間設法使系統回到修改之前的狀態。 我喜歡使用shell 腳本程序或批處理文件去作變動。 那樣,我將能存放一條命令(能返回一個等同與原始狀態的配置值),并把它作為注釋行直接放在賦予配置參量新值的命令之上。 然后,如果我需要取消變動,我把這行明令取消注釋,而把引起變動的命令注釋掉并且重新運行這個腳本或批處理文件,這樣就可以了。如果你被一些改變強行退出,請準備好向每一個 必要的改變重新應用。

 

6. 不要因為覺得調整的好處而刻意去做調整。所執行的調整必須能解決一個明確的問題

。如果你的調整策略與讓你試圖解決問題的根源沒有直接的關系的話,你將收獲甚微或者一無所獲直到問題的根源被最終解決。從某個角度而言,這樣的行為確實為后來的調整工作帶來更多的麻煩。

 

7. 謹記回報遞減規律。 記住, 最高效的性能調整結果的收益通常來自你最初的努力。 隨后調整將會導致逐步減小的收益和需要付出更多的努力。

調整的DB2 UDB 系統配置

DB2 UDB安裝后DB2 UDB會使用一套注冊變量來配置系統。 其中一些變量對于性能起著關鍵性的作用; 而其他一些的影響則是微乎其微,甚至毫無作用。 接下來我將說明哪些注冊變量能在每一個操作系統的平臺上產生重大的影響。

 

切記,對這些變量的改動將會影響整個系統,因此在改變注冊變量的時候要特別當心。

對于所有平臺

以下變量的推薦適用于Linux Unix Windows平臺。

 

DB2_APM_PERFORMANCE  OFF是該注冊變量的缺省值。這個參數指定是否能夠在存取計劃管理器(APM)中作出相應的調整,這樣做就可以對SQL高速緩沖存儲器的動作產生影響。它還闡述了全局性的SQL高速緩沖存儲器是否能在沒有使用任何包鎖定的情況下工作,這是由阻止高速緩沖包從不被注意的與之無關的地方進入的內部系統鎖機制所決定。

 

nonproduction 環境里,這變量只能被設置為ON 當設置成ON的時候,你可以看到Out of package cache的錯誤信息,并且內存使用率將會增加。 預編譯、綁定和重新綁定(PRECOMPILE, BIND, and REBIND 操作無法進行,也不能將這些包無效或者無法執行。

 

DB2_AVOID_PREFETCH  該變量指定在災難性恢復期間是否執行預存取(prefetching 缺省值是OFF ; 如果設置成ONprefetching將不執行。

 

DB2BPVARS  支持DB2BPVARS的參數明確指出了在調整緩沖池(buffer pools)時使用的包含參數值的那個文件的位置,參數包括:

NO_NT_SCATTER

NT_SCATTER_DMSFILE

NT_SCATTER_DMSDEVICE

NT_SCATTER_SMS

NUMPREFETCHQUEUES

PREFETCHQUEUESIZE

 

對于每個帶_SCATTER的參數,缺省值是 0 (OFF ) 允許的取值是:0 (OFF) 1 (ON) 對于NUMPREFETCHQUEUES參數,缺省值是1 參數值的范圍是 1 NUM_IOSERVERS 對于 PREFETCHQUEUESIZE參數,缺省值是都是最大值: 100 2 * NUM_IOSERVERS。范圍是 1 32,767

 

每一個_SCATTER參數都用于打開或關閉各自的表空間容器的scatter read(或者關閉所有容器的scatter read)。其他的參數則可用于提高緩沖池數據的預存取(prefetching)。

 

: 當使用Windows操作系統并且DB2NTNOCACHE參數被設置成ON,那么帶_SCATTER的參數只能被設置成ON

 

DB2CHKPTR  該變量指定是否執行輸入指針檢查; 缺省值是OFF

 

DB2_ENABLE_BUFPD  缺省值是OFF,它指明是否DB2 將使用中間緩沖去改進查詢的性能。

 

DB2_EXTENDED_OPTIMIZATION  該變量指定查詢優化器是否使用優化擴展去改進查詢性能;缺省值是OFF

 

DB2MAXFSCRSEARCH  該變量可能被設置成-1,或者是從 1 33554的任何一個,為了在當增加一條紀錄到一個表中的時候指定搜索可用空間控制紀錄的數量。他允許你去平衡空間再使用的插入速度(小的數值使插入速度最優化,大的數值使空間再使用成為最優化)。 如果被設置成 -1DB2 數據庫管理器將搜尋所有可用空間控制紀錄。缺省值是5

 

DB2MEMMAXFREE  該變量指定每個DB2 代理將保留可以用內存的數量; 取值范圍從0 2.0e+32 字節。 缺省是8,388,608 個字節。

 

DB2_OVERRIDE_BPF  該變量可以被設置為整數個4K頁,它指定將被創建在數據庫北激活時或首次建立一個連接時的緩沖池的大小(在頁面里)。當由于內存限制的發生導致出現故障時,DB2_OVERRIDE_BPF這個參數是非常有用的。這樣內存限制可能出現在由于真正的內存不足(很少發生)或由于嘗試用DB2 數據庫管理器對緩沖池分配過大或者使用不恰當的配置的時候。缺省值是空。

 

DB2PRIORITIES  該變量的取值是與平臺相關的。 DB2PRIORITIES 控制著DB2 進程和線程優先權。

 

DB2_SORT_AFTER_TQ  DB2_SORT_AFTER_TQ 指定了在分區數據庫環境下當接收端要求數據排序并且接收的節點數與發送的相等時DB2 優化器與引導表隊列怎樣協同工作。當設置成NO (缺省值) DB2 優化器傾向于在傳送端進行排序并且在接收端進行合并行。當設置為YES,當所有行接收完成后,優化器在接收端傳輸未排序的行并將其排序。

 

DB2_STPROC_LOOKUP_FIRST 該變量指定DB2 UDB 服務器是否在察看sqllib\function目錄 sqllib\function\unfenced目錄之前執行對所有DARI(數據庫應用程序遠程接口,存儲過程的過時術語)和存儲過程的編目查找。缺省值是OFF

 

DB2_HASH_JOIN  YES 或者 NO 的取值指明是否在編譯一個存取計劃(access plan)的時候可以使用hash join。缺省值是NO

 

DB2_PARALLEL_IO  可能的取值包括 * NULL(缺省值),指定是否DB2在從表空間容器中讀寫數據時候使用并行I/O

 

However, because of the one-page container tag, the extents will not line up with the RAID stripes. It may be necessary to access more physical disks than would be optimal during an I/O request unless this registry variable is set to ON.

DB2_STRIPED_CONTAINERS  該變量設置成ON或者NULL(缺省)指定表空間容器ID 標簽是否采用部份或全部的RAID 磁盤數據條。 當使用RAID 設備,表空間創建的時候采用與RAID 數據塊大小相等的或者是數倍的大小的數據條的擴展尺寸。然而,由于頁容器標記的存在,擴展部分不能按照RAID數據條進行排列。訪問更多物理硬盤比在I/O請求的過程中進行優化顯得更有必要,除非該變量被設置為ON

對于UNIX平臺

以下變量適用于Unix 平臺(AIXHP-UX或者其他一些被提到的)。

 

DB2MEMDISCLAIM  該變量指明AIX操作系統是否應該停止頁面內存使之不再占據任何的實際的存儲空間。設置DB2MEMDISCLAIMYES(缺省)指明在程序關閉的時候DB2 UDB釋放部分或者全部內存,這取決于由DB2MEMMAXFREE注冊變量所決定的值。如果DB2MEMMAXFREE為空,程序關閉的時候所有內存將被釋放。如果DB2MEMMAXFREE被賦值,僅有部分的(最高到DB2MEMMAXFREE所設定得值)內存釋放。程序終結時,釋放保證了內存能被其他的進程所使用。

 

DB2_MMAP_READ  它與DB2_MMAP_WRITE一起使用,缺省值 YES 允許DB2 for AIX 使用mmap 作為I/O 一個交錯法。 在多數環境中,mmap在使用的時候應該避免當多個進程對同一文件的不同扇區執行寫入操作造成的操作系統鎖定的情況。

 

DB2_MMAP_WRITE  它與DB2_MMAP_READ一起使用,缺省值是YES 在這個時候他允許DB2 for AIX使用mmap 作為一個I/O的預備的方法。

 

DB2_PINNED_BP  這個AIX HP-UX平臺上的變量指定是否數據庫使用的全局內存 (包括緩沖池的內存) 將被保留在系統主存儲器以獲得更加穩定的數據庫性能。

對于Windows平臺

以下變量適用于Windows NT 操作環境。

 

DB2NTMEMSIZE  Windows NT 要求, 所有共用存儲器片段在初始化時都被儲存在動態連接程序庫,以保證程序運行的整個過程中均有匹配地址。必要的話,在Windows NT下可不考慮DB2的缺省值;但是,在多數情況下,缺省值應當足夠使用。缺省值如下:

DBMS: 16,777,216;

FCM: 22,020,096;

DBAT: 33,554,432;

APLD: 16,777,216.

 

DB2NTNOCACHE  指定文件系統高速緩沖存儲器是否執行。該變量適用于除了LONG或者LOB類型數據之外的任何類型的數據。除去系統高速緩沖存儲器允許數據庫使用更多可用內存以便增加更多的緩沖池(buffer pool)或排序堆(sortheap)。 缺省是OFF

 

DB2NTPRICLASS  用于關聯各個獨立線程的優先權(設置使用 DB2PRIORITIES) ,該變量為DB2 實例程序(DB2SYSCS.EXE)設置優先組同時確定DB2線程在系統中相對于其他線程的絕對優先權。以下三個優先組是可用的:

 

NORMAL_PRIORITY_CLASS (缺省)

REALTIME_PRIORITY_CLASS (R)

HIGH_PRIORITY_CLASS (H).

 

取值可以是RH或者其他值,缺省是NULL

 

DB2NTWORKSET  該變量指明DB2可以利用到的最小和最大工作區大小。缺省時,當Windows NT沒有處在頁面調度的狀態下,一個過程的工作區可能隨心所欲的增大。 但是,一旦處于頁面調度,最大工作區只能是大約1MB 該變量允許你忽略這個缺省狀態。 可能的取值包括 PositiveNumber, PositiveNumber0. (缺省是1,1 )

修改DB2注冊變量

你怎樣去確定是否這些變量已經被設置并且他們被設置成了什么? DB2 UDB V8.1 給你兩種方式察看和改變變量: 由使用DB2 注冊管理工具(Configuration Assistant可以找到) 或執行系統命令 db2set Listing 1 顯示那個命令的語法。

注:顯示在角括號里的參數(< >) 是可選擇的;顯示在方括號里的參量或選項([ ])  是必需的。

 

Listing 1: 察看和改變變量值的語法

 

Table 1 描述了這個命令的其他可利用的選項.

Table 1:  db2set 命令選項:

 

 

如果執行不加選項的 db2set 命令,將會返回一個包含了已經被設置的變量以及他們的當前值的列表,

繼續調節

DB2 UDB 的性能調整可能是一個漫長的過程因為許多因素可能影響性能。 這個專欄報道了一般性能調整和改進DB2 UDB 系統配置的方法。在下個專欄,我將闡述調整實例和數據庫配置為最佳性能的方法。

 

 


關于作者

Roger E. Sanders Network Appliance Inc.的數據庫維護工程師。他也是 All-In-One DB2 Administration Exam Guide (McGraw-Hill/Osborne Media, 2002)一書的作者。如果你想與他取得聯系,請致函roger.sanders@netapp.com

關于本人

那就沒有什么好說的了吧;第一次翻譯有許多力不從心,希望大家在閱讀的同時參照英文原文,歡迎批評指正。


溫馨提示:您可以點擊下面的鏈接閱讀或打印基本性能調整(翻譯)全文。

  • 本站刊登此文只為傳遞信息,并不表示贊同或者反對作者觀點。
  • 如果此內容給您造成了負面影響或者損失,本站不承擔任何責任。
  • 如果內容涉及版權問題,請及時與我們取得聯系。
411
更多
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99