最佳化調整Oracle 8i資料庫(轉)

post0發表於2007-08-10
最佳化調整Oracle 8i資料庫(轉)[@more@]

Oracle 8i資料庫伺服器是高度可最佳化的軟體產品,經常性的調整可以最佳化系統的效能,防止出現資料瓶頸。我們透過調整資料庫系統,可以使它達到最佳效能以滿足使用者的需要。

下面,筆者將介紹最佳化和調整Sun SPARC Solaris系統平臺上的Oracle 8i資料庫伺服器的一些相關命令和方法。

Solaris效能監控命令

Solaris提供了效能監控命令,用於監控資料庫效能和決定資料庫的需求。除了為Oracle程式提供統計外,它們還為CPU提供使用統計,為整個系統提供中斷、交換、分頁和上下文轉換功能。監控命令包括:

1.vmstat

vmstat命令報告Solaris上的程式、虛擬記憶體、磁碟、分頁和CPU的活動情況。下面命令將顯示系統每5秒鐘做的事的概要:

% vmstat 5

2.sar

sar命令用於監控交換、分頁、磁碟和CPU活動。下面命令用於每10秒顯示10次分頁活動的概要:

$ sar -p 10 10

3.iostat

iostat命令報告終端和磁碟的活動。該報告顯示哪些磁碟是忙的(該資訊在平衡I/O負載時有用)。下面命令用於每5秒顯示5次終端和磁碟活動:

$ iostat 5 5

4.swap

swap命令報告關於交換空間使用的資訊。交換空間的不足可以導致系統懸掛,減慢響應時間。

5.mpstat

mpstat命令報告每個處理器的統計。

調整記憶體管理

1.分配足夠的交換空間

記憶體交換(swapping)可以造成很大的記憶體開銷,應該將它最小化。在Solaris上使用sar -w或vmstat -S命令來檢查交換。若系統在交換,且需要節省記憶體,則應採用以下措施:

避免執行不必要的系統daemon程式或應用程式程式;

減少資料庫緩衝區的數量,以釋放一些記憶體;

減少UNIX檔案緩衝區的數量(特別是在使用原始裝置時)。

在Solaris上用swap -l命令決定當前正在使用多少交換空間。使用swap -a命令向系統中增加交換區。用系統RAM兩到四倍的交換空間啟動資料庫。若準備使用Oracle Developer、Oracle Applications或Oracle InterOffice,則使用更高的值。監控交換空間的使用,在必要時增加它。

2.控制分頁

記憶體分頁(paging)可能沒有交換那樣問題嚴重,因為為了執行,整個應用程式不必全部放在記憶體中。少量的分頁不可能顯著地影響系統的效能。為了檢測過多的分頁,在快速響應或空閒期間執行測量,並與響應遲緩時的測量進行比較。使用vmstat或sar -p監控分頁。

若系統有過多的頁面活動,則需考慮以下解決辦法:

安裝更多的記憶體;

將一些工作移到另一系統中;

配置系統核心使用更少的記憶體;

保持SGA在單個共享記憶體段中。

沒有足夠的共享記憶體,將不能夠啟動資料庫。這時,我們可以重新配置UNIX核心,以增加共享記憶體。

調整磁碟I/O

I/O瓶頸是最容易識別的效能問題。跨所有可用的磁碟均勻地平衡I/O,可以減少磁碟存取的時間。對於較小的資料庫和不使用並行查詢選項的那些資料庫,要確保不同的資料檔案和表空間跨可用的磁碟分佈。

1.調整DBWR,增加寫頻寬

Oracle提供以下方法以防止DBWR(資料庫寫程式)活動成為瓶頸:

使用非同步I/O 非同步I/O允許程式繼續處理下一個操作,而不必等待在發出寫後,最小化了空閒時間,因而改善了系統效能。Solaris支援原始裝置和檔案系統資料檔案的非同步I/O。

使用I/O從屬 I/O從屬(slave)是專用的程式,其惟一功能是執行I/O。它們代替Oracle 7的多個DBWR特性(實際上它們是多個DRWR的概括,可以由其它程式分佈)。不管非同步I/O是否可用,它們都可以操作。若設定的話,它們被從 LARGE_POOL_SIZE分配,否則從共享記憶體緩衝區分配。

初始化引數控制了I/O從屬的行為,其中DISK_ASYNCH_IO和TAPE_ASYNCH_IO允許分別為磁碟和磁帶裝置關閉非同步I/O(因為每個程式型別的I/O從屬預設為0,除非明確設定,否則沒有I/O從屬被髮布)。

若DISK_ASYNCH_IO或TAPE_ASYNCH_IO無效,則DBWR_IO_SLAVES應該設定大於0,否則DBWR將成為一個瓶頸。在這種情況下,Solaris上DBWR_IO_SLAVES的最佳值為4,而在LGWR_IO_SLAVES的情況下,釋出的從屬不應該超過9個。

DB_WRITER_PROCESSES代替Oracle 7的引數DB_WRITERS,指定某例項的資料庫寫程式的初始數量。若使用DBWR_IO_SLAVES,則只有一個資料庫寫程式被使用,而不管DB_WRITER_PROCESSES的設定。

2.使用IOSTAT查詢大磁碟請求佇列

請求佇列顯示特定磁碟裝置上等待服務的I/O請求有多長。由大量的磁碟I/O或由平均查詢時間I/O引起請求佇列。磁碟請求佇列應該為0或接近於0。

3.選擇合適的檔案系統型別

Sun SPARC Solaris允許選擇檔案系統。檔案系統有不同特性,它們用於存取資料的技術對資料庫效能有實質性的影響。檔案系統通常包括:

.s5:UNIX系統V檔案系統;

.ufs:UNIX檔案系統(由BSD UNIX派生);

.vxfs:Veritas檔案系統;

.原始裝置:沒有檔案系統。

通常沒有事實證明檔案系統與檔案系統是相配的,甚至不同的ufs檔案系統也難以比較(因為執行不同),儘管ufs通常是高效能的選擇,但根據選擇檔案系統的不同,效能差別變化也很大。

監控磁碟效能

使用sar -b和sar -u可以監控磁碟效能。

sar -b對磁碟效能的重要性如下:

(1)bread/s、bwrit/s:塊讀和塊寫,它們對檔案系統而言是非常重要的。

(2)pread/s、pwrit/s:分割槽讀和分割槽寫,它們對原始分割槽資料庫系統是非常重要的。

Oracle塊大小應該匹配磁碟塊大小或是磁碟塊大小的倍數。若可能的話,在資料庫檔案使用檔案系統前在分割槽上做檔案系統檢查;然後製作一個新的檔案系統,確保它是清潔的和不破碎的。儘可能地均勻分佈磁碟I/O,將資料庫檔案與日誌檔案分開。

調整CPU的使用

1.在同一優先權上保持所有Oracle使用者和程式

在Oracle中,所有使用者和後臺程式操作在同一優先順序上,修改優先權對競爭和響應時間有意想不到的影響。

例如,若LGWR(日誌寫程式)獲得低優先權,則它不能充分地執行,LGWR將成為一個瓶頸;另一方面,若LGWR有高的優先權,使用者程式可能要忍受較壞的響應時間。

2.在多處理器系統上使用處理器親和力/捆綁

在多處理器環境中,使用處理器親和力/捆綁(affinity/binding,若它在系統中可用)。處理器捆綁禁止某程式從一個CPU移動到另一個,允許CPU快取記憶體中的資訊被更好地利用,而且可以捆綁伺服器程式,從而充分利用快取記憶體(因為它總是活動的,允許後臺程式在CPU間流動)。

3.為Export(匯出)/Import(匯入)和SQL?Loader使用單任務連結

若要在使用者和Oracle 8i之間傳輸大量的資料(如使用Export/Import),使用單任務結構是非常高效的,因為作為單任務連結Oracle可執行程式,允許某使用者程式直接存取整個SGA。但執行單任務需要更多的記憶體。為了使用單任務匯入、匯出和SQL?Loader(sqlldrst)可執行程式,我們可以呼叫 make檔案的ins_rdbms.mk(在$ORACLE_HOME/rdbms/lib目錄中)。

下面是用於實現單任務匯入、匯出和SQL?Loader(sqlldrst)的可執行程式:

% cd $ORACLE_HOME/rdbms/lib

% make -f ins_utilities.mk singletask

調整塊大小和檔案大小

在Solaris上,Oracle塊預設值為2KB,可以設定的實際大小為2KB的倍數,最大設定值為16KB。

最優的塊大小通常是預設值,但隨著應用程式而變化。為了用不同的Oracle塊大小建立資料庫,在建立資料庫前在initsid.ora檔案中增加下面行:

db_block_size=new_block_size

調整Solaris緩衝區快取記憶體大小

為了充分利用原始裝置的優點,我們需要調整Oracle 8i緩衝區快取記憶體的大小和Solaris緩衝區快取記憶體。

Solaris緩衝區快取記憶體由作業系統提供。它在記憶體中儲存資料的塊(在它們被從記憶體傳送到磁碟前,反之亦然)。

Oracle 8i緩衝區快取記憶體是在記憶體中儲存Oracle資料庫緩衝區的區域。因為Oracle 8i可以使用原始裝置,它不需要使用Solaris緩衝區快取記憶體。

在移動原始裝置時,增加Oracle 8i緩衝區快取記憶體的大小。若系統中記憶體的數量是有限的,則相應地減少Solaris緩衝區快取記憶體的大小。

Solaris命令sar可以幫助決定哪些緩衝區快取記憶體應該增加或減少:

sar -b:報告Solaris緩衝區快取記憶體的活動;

sar -w:報告Solaris記憶體交換活動;

sar -u:報告CPU利用情況;

sar -r:報告記憶體利用情況;

sar -p:報告Solaris記憶體分頁活動。

通常在快取命中率上升時,我們需要增加Oracle 8i緩衝區快取記憶體的大小,而在交換/分頁活動變高時,我們需要減少快取記憶體的大小。

我們還可以使用Oracle 8i建立的跟蹤(Trace)和警報(Alter)檔案來診斷和解決執行中存在的問題。

只要我們充分利用以上命令和方法,就可以很好地最佳化與調整Oracle 8i資料庫了

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-942470/,如需轉載,請註明出處,否則將追究法律責任。

相關文章