Oracle 8i數據庫服務器是高度可優化的軟件產品,經常性的調整可以優化系統的性能,防止出現數據瓶頸。我們通過調整數據庫系統,可以使它達到最佳性能以滿足用戶的需要。
下面,筆者將介紹優化和調整Sun SPARC Solaris系統平台上的Oracle 8i數據庫服務器的一些相關命令和方法。
Solaris性能監控命令
Solaris提供了性能監控命令,用於監控數據庫性能和決定數據庫的需求。除了為Oracle進程提供統計外,它們還為CPU提供使用統計,為整個系統提供中斷、交換、分頁和上下文轉換功能。監控命令包括:
1.vmstat
vmstat命令報告Solaris上的進程、虛擬內存、磁盤、分頁和CPU的活動情況。下面命令將顯示系統每5秒鐘做的事的概要:
% vmstat 5
2.sar
ar命令用於監控交換、分頁、磁盤和CPU活動。下面命令用於每10秒顯示10次分頁活動的概要:
#8194;$ sar -p 10 10
3.iOStat
iOStat命令報告終端和磁盤的活動。該報告顯示哪些磁盤是忙的(該信息在平衡I/O負載時有用)。下面命令用於每5秒顯示5次終端和磁盤活動:
#8194;$ iOStat 5 5
4.swap
wap命令報告關於交換空間使用的信息。交換空間的不足可以導致系統懸掛,減慢響應時間。
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可以監控磁盤性能。
ar -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(導入)和SQLLoader使用單任務鏈接
若要在用戶和Oracle 8i之間傳輸大量的數據(如使用Export/Import),使用單任務結構是非常高效的,因為作為單任務鏈接Oracle可執行程序,允許某用戶進程直接存取整個SGA。但運行單任務需要更多的內存。為了使用單任務導入、導出和SQLLoader(sqlldrst)可執行程序,我們可以調用make文件的ins_rdbms.mk(在 $Oracle_HOME/rdbms/lib目錄中)。
下面是用於實現單任務導入、導出和SQLLoader(sqlldrst)的可執行程序:
% cd $Oracle_HOME/rdbms/lib
% make -f ins_utilitIEs.mk singletask
調整塊大小和文件
您正在看的MySQL教程是:優化調整Oracle 8i數據庫。大小
在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可以幫助決定哪些緩沖區高速緩存應該增加或減少:
ar -b:報告Solaris緩沖區高速緩存的活動;
ar -w:報告Solaris內存交換活動;
ar -u:報告CPU利用情況;
ar -r:報告內存利用情況;
ar -p:報告Solaris內存分頁活動。
通常在緩存命中率上升時,我們需要增加Oracle 8i緩沖區高速緩存的大小,而在交換/分頁活動變高時,我們需要減少高速緩存的大小。
我們還可以使用Oracle 8i建立的跟蹤(Trace)和警報(Alter)文件來診斷和解決運行中存在的問題。
只要我們充分利用以上命令和方法,就可以很好地優化與調整Oracle 8i數據庫了。