優(yōu)化調(diào)整Oracle數(shù)據(jù)庫
時間:2009-03-31 17:36:00
來源:UltraLAB圖形工作站方案網(wǎng)站
人氣:9676
作者:admin
Oracle 數(shù)據(jù)庫服務(wù)器是高度可優(yōu)化的軟件產(chǎn)品,經(jīng)常性的調(diào)整可以優(yōu)化系統(tǒng)的性能,
防止出現(xiàn)數(shù)據(jù)瓶頸。我們通過調(diào)整數(shù)據(jù)庫系統(tǒng),可以使它達(dá)到最佳性能以滿足用戶的需要。
下面,筆者將介紹優(yōu)化和調(diào)整Sun SPARC Solaris系統(tǒng)平臺上的Oracle 數(shù)據(jù)庫服務(wù)器
Solaris性能監(jiān)控命令
Solaris提供了性能監(jiān)控命令,用于監(jiān)控數(shù)據(jù)庫性能和決定數(shù)據(jù)庫的需求。除了為Oracle
進(jìn)程提供統(tǒng)計外,它們還為CPU提供使用統(tǒng)計,為整個系統(tǒng)提供中斷、交換、分頁和上下文轉(zhuǎn)
1.vmstat
vmstat命令報告Solaris上的進(jìn)程、虛擬內(nèi)存、磁盤、分頁和CPU的活動情況。下面命令
% vmstat 5
2.sar
sar命令用于監(jiān)控交換、分頁、磁盤和CPU活動。下面命令用于每10秒顯示10次分頁活動
$ sar -p 10 10
3.iostat
iostat命令報告終端和磁盤的活動。該報告顯示哪些磁盤是忙的(該信息在平衡I/O負(fù)載
$ iostat 5 5
4.swap
swap命令報告關(guān)于交換空間使用的信息。交換空間的不足可以導(dǎo)致系統(tǒng)懸掛,減慢響應(yīng)時
5.mpstat
mpstat命令報告每個處理器的統(tǒng)計。
調(diào)整內(nèi)存管理
1.分配足夠的交換空間
內(nèi)存交換(swapping)可以造成很大的內(nèi)存開銷,應(yīng)該將它最小化。在Solaris上使用
sar -w或vmstat -S命令來檢查交換。若系統(tǒng)在交換,且需要節(jié)省內(nèi)存,則應(yīng)采用以下措施:
避免運(yùn)行不必要的系統(tǒng)daemon進(jìn)程或應(yīng)用程序進(jìn)程;
減少數(shù)據(jù)庫緩沖區(qū)的數(shù)量,以釋放一些內(nèi)存;
減少UNIX文件緩沖區(qū)的數(shù)量(特別是在使用原始設(shè)備時)。
在Solaris上用swap -l命令決定當(dāng)前正在使用多少交換空間。使用swap -a命令向系統(tǒng)中
增加交換區(qū)。用系統(tǒng)RAM兩到四倍的交換空間啟動數(shù)據(jù)庫。若準(zhǔn)備使用Oracle Developer、
Oracle Applications或Oracle InterOffice,則使用更高的值。監(jiān)控交換空間的使用,在必
2.控制分頁
內(nèi)存分頁(paging)可能沒有交換那樣問題嚴(yán)重,因為為了運(yùn)行,整個應(yīng)用程序不必全部
放在內(nèi)存中。少量的分頁不可能顯著地影響系統(tǒng)的性能。為了檢測過多的分頁,在快速響應(yīng)或
空閑期間運(yùn)行測量,并與響應(yīng)遲緩時的測量進(jìn)行比較。使用vmstat或sar -p監(jiān)控分頁。
若系統(tǒng)有過多的頁面活動,則需考慮以下解決辦法:
安裝更多的內(nèi)存;
將一些工作移到另一系統(tǒng)中;
配置系統(tǒng)核心使用更少的內(nèi)存;
保持SGA在單個共享內(nèi)存段中。
沒有足夠的共享內(nèi)存,將不能夠啟動數(shù)據(jù)庫。這時,我們可以重新配置UNIX核心,以增加
調(diào)整磁盤I/O
I/O瓶頸是最容易識別的性能問題。跨所有可用的磁盤均勻地平衡I/O,可以減少磁盤存
取的時間。對于較小的數(shù)據(jù)庫和不使用并行查詢選項的那些數(shù)據(jù)庫,要確保不同的數(shù)據(jù)文件和
1.調(diào)整DBWR,增加寫帶寬
Oracle提供以下方法以防止DBWR(數(shù)據(jù)庫寫進(jìn)程)活動成為瓶頸:
使用異步I/O 異步I/O允許進(jìn)程繼續(xù)處理下一個操作,而不必等待在發(fā)出寫后,最小化了
空閑時間,因而改善了系統(tǒng)性能。Solaris支持原始設(shè)備和文件系統(tǒng)數(shù)據(jù)文件的異步I/O。
使用I/O從屬 I/O從屬(slave)是專用的進(jìn)程,其惟一功能是執(zhí)行I/O。它們代替
Oracle 7的多個DBWR特性(實際上它們是多個DRWR的概括,可以由其它進(jìn)程分布)。不管異步
I/O是否可用,它們都可以操作。若設(shè)置的話,它們被從LARGE_POOL_SIZE分配,否則從共享
初始化參數(shù)控制了I/O從屬的行為,其中DISK_ASYNCH_IO和TAPE_ASYNCH_IO允許分別為磁
盤和磁帶設(shè)備關(guān)閉異步I/O(因為每個進(jìn)程類型的I/O從屬缺省為0,除非明確設(shè)置,否則沒有
若DISK_ASYNCH_IO或TAPE_ASYNCH_IO無效,則DBWR_IO_SLAVES應(yīng)該設(shè)置大于0,否則DBWR
將成為一個瓶頸。在這種情況下,Solaris上DBWR_IO_SLAVES的最佳值為4,而在 #p#page_title#e#
DB_WRITER_PROCESSES代替Oracle 7的參數(shù)DB_WRITERS,指定某實例的數(shù)據(jù)庫寫進(jìn)程的初
始數(shù)量。若使用DBWR_IO_SLAVES,則只有一個數(shù)據(jù)庫寫進(jìn)程被使用,而不管DB
2.使用IOSTAT查找大磁盤請求隊列
請求隊列顯示特定磁盤設(shè)備上等待服務(wù)的I/O請求有多長。由大量的磁盤I/O或由平均查找
時間I/O引起請求隊列。磁盤請求隊列應(yīng)該為0或接近于0。
3.選擇合適的文件系統(tǒng)類型
Sun SPARC Solaris允許選擇文件系統(tǒng)。文件系統(tǒng)有不同特性,它們用于存取數(shù)據(jù)的技術(shù)
.s5:UNIX系統(tǒng)V文件系統(tǒng);
.ufs:UNIX文件系統(tǒng)(由BSD UNIX派生);
.vxfs:Veritas文件系統(tǒng);
.原始設(shè)備:沒有文件系統(tǒng)。
通常沒有事實證明文件系統(tǒng)與文件系統(tǒng)是相配的,甚至不同的ufs文件系統(tǒng)也難以比較(
因為執(zhí)行不同),盡管ufs通常是高性能的選擇,但根據(jù)選擇文件系統(tǒng)的不同,性能差別變化
監(jiān)控磁盤性能
使用sar -b和sar -u可以監(jiān)控磁盤性能。
sar -b對磁盤性能的重要性如下:
(1)bread/s、bwrit/s:塊讀和塊寫,它們對文件系統(tǒng)而言是非常重要的。
(2)pread/s、pwrit/s:分區(qū)讀和分區(qū)寫,
防止出現(xiàn)數(shù)據(jù)瓶頸。我們通過調(diào)整數(shù)據(jù)庫系統(tǒng),可以使它達(dá)到最佳性能以滿足用戶的需要。
下面,筆者將介紹優(yōu)化和調(diào)整Sun SPARC Solaris系統(tǒng)平臺上的Oracle 數(shù)據(jù)庫服務(wù)器
Solaris性能監(jiān)控命令
Solaris提供了性能監(jiān)控命令,用于監(jiān)控數(shù)據(jù)庫性能和決定數(shù)據(jù)庫的需求。除了為Oracle
進(jìn)程提供統(tǒng)計外,它們還為CPU提供使用統(tǒng)計,為整個系統(tǒng)提供中斷、交換、分頁和上下文轉(zhuǎn)
1.vmstat
vmstat命令報告Solaris上的進(jìn)程、虛擬內(nèi)存、磁盤、分頁和CPU的活動情況。下面命令
% vmstat 5
2.sar
sar命令用于監(jiān)控交換、分頁、磁盤和CPU活動。下面命令用于每10秒顯示10次分頁活動
$ sar -p 10 10
3.iostat
iostat命令報告終端和磁盤的活動。該報告顯示哪些磁盤是忙的(該信息在平衡I/O負(fù)載
$ iostat 5 5
4.swap
swap命令報告關(guān)于交換空間使用的信息。交換空間的不足可以導(dǎo)致系統(tǒng)懸掛,減慢響應(yīng)時
5.mpstat
mpstat命令報告每個處理器的統(tǒng)計。
調(diào)整內(nèi)存管理
1.分配足夠的交換空間
內(nèi)存交換(swapping)可以造成很大的內(nèi)存開銷,應(yīng)該將它最小化。在Solaris上使用
sar -w或vmstat -S命令來檢查交換。若系統(tǒng)在交換,且需要節(jié)省內(nèi)存,則應(yīng)采用以下措施:
避免運(yùn)行不必要的系統(tǒng)daemon進(jìn)程或應(yīng)用程序進(jìn)程;
減少數(shù)據(jù)庫緩沖區(qū)的數(shù)量,以釋放一些內(nèi)存;
減少UNIX文件緩沖區(qū)的數(shù)量(特別是在使用原始設(shè)備時)。
在Solaris上用swap -l命令決定當(dāng)前正在使用多少交換空間。使用swap -a命令向系統(tǒng)中
增加交換區(qū)。用系統(tǒng)RAM兩到四倍的交換空間啟動數(shù)據(jù)庫。若準(zhǔn)備使用Oracle Developer、
Oracle Applications或Oracle InterOffice,則使用更高的值。監(jiān)控交換空間的使用,在必
2.控制分頁
內(nèi)存分頁(paging)可能沒有交換那樣問題嚴(yán)重,因為為了運(yùn)行,整個應(yīng)用程序不必全部
放在內(nèi)存中。少量的分頁不可能顯著地影響系統(tǒng)的性能。為了檢測過多的分頁,在快速響應(yīng)或
空閑期間運(yùn)行測量,并與響應(yīng)遲緩時的測量進(jìn)行比較。使用vmstat或sar -p監(jiān)控分頁。
若系統(tǒng)有過多的頁面活動,則需考慮以下解決辦法:
安裝更多的內(nèi)存;
將一些工作移到另一系統(tǒng)中;
配置系統(tǒng)核心使用更少的內(nèi)存;
保持SGA在單個共享內(nèi)存段中。
沒有足夠的共享內(nèi)存,將不能夠啟動數(shù)據(jù)庫。這時,我們可以重新配置UNIX核心,以增加
調(diào)整磁盤I/O
I/O瓶頸是最容易識別的性能問題。跨所有可用的磁盤均勻地平衡I/O,可以減少磁盤存
取的時間。對于較小的數(shù)據(jù)庫和不使用并行查詢選項的那些數(shù)據(jù)庫,要確保不同的數(shù)據(jù)文件和
1.調(diào)整DBWR,增加寫帶寬
Oracle提供以下方法以防止DBWR(數(shù)據(jù)庫寫進(jìn)程)活動成為瓶頸:
使用異步I/O 異步I/O允許進(jìn)程繼續(xù)處理下一個操作,而不必等待在發(fā)出寫后,最小化了
空閑時間,因而改善了系統(tǒng)性能。Solaris支持原始設(shè)備和文件系統(tǒng)數(shù)據(jù)文件的異步I/O。
使用I/O從屬 I/O從屬(slave)是專用的進(jìn)程,其惟一功能是執(zhí)行I/O。它們代替
Oracle 7的多個DBWR特性(實際上它們是多個DRWR的概括,可以由其它進(jìn)程分布)。不管異步
I/O是否可用,它們都可以操作。若設(shè)置的話,它們被從LARGE_POOL_SIZE分配,否則從共享
初始化參數(shù)控制了I/O從屬的行為,其中DISK_ASYNCH_IO和TAPE_ASYNCH_IO允許分別為磁
盤和磁帶設(shè)備關(guān)閉異步I/O(因為每個進(jìn)程類型的I/O從屬缺省為0,除非明確設(shè)置,否則沒有
若DISK_ASYNCH_IO或TAPE_ASYNCH_IO無效,則DBWR_IO_SLAVES應(yīng)該設(shè)置大于0,否則DBWR
將成為一個瓶頸。在這種情況下,Solaris上DBWR_IO_SLAVES的最佳值為4,而在 #p#page_title#e#
DB_WRITER_PROCESSES代替Oracle 7的參數(shù)DB_WRITERS,指定某實例的數(shù)據(jù)庫寫進(jìn)程的初
始數(shù)量。若使用DBWR_IO_SLAVES,則只有一個數(shù)據(jù)庫寫進(jìn)程被使用,而不管DB
2.使用IOSTAT查找大磁盤請求隊列
請求隊列顯示特定磁盤設(shè)備上等待服務(wù)的I/O請求有多長。由大量的磁盤I/O或由平均查找
時間I/O引起請求隊列。磁盤請求隊列應(yīng)該為0或接近于0。
3.選擇合適的文件系統(tǒng)類型
Sun SPARC Solaris允許選擇文件系統(tǒng)。文件系統(tǒng)有不同特性,它們用于存取數(shù)據(jù)的技術(shù)
.s5:UNIX系統(tǒng)V文件系統(tǒng);
.ufs:UNIX文件系統(tǒng)(由BSD UNIX派生);
.vxfs:Veritas文件系統(tǒng);
.原始設(shè)備:沒有文件系統(tǒng)。
通常沒有事實證明文件系統(tǒng)與文件系統(tǒng)是相配的,甚至不同的ufs文件系統(tǒng)也難以比較(
因為執(zhí)行不同),盡管ufs通常是高性能的選擇,但根據(jù)選擇文件系統(tǒng)的不同,性能差別變化
監(jiān)控磁盤性能
使用sar -b和sar -u可以監(jiān)控磁盤性能。
sar -b對磁盤性能的重要性如下:
(1)bread/s、bwrit/s:塊讀和塊寫,它們對文件系統(tǒng)而言是非常重要的。
(2)pread/s、pwrit/s:分區(qū)讀和分區(qū)寫,
它們對原始分區(qū)數(shù)據(jù)庫系統(tǒng)是非常重要的。
Oracle塊大小應(yīng)該匹配磁盤塊大小或是磁盤塊大小的倍數(shù)。若可能的話,在數(shù)據(jù)庫文件使
用文件系統(tǒng)前在分區(qū)上做文件系統(tǒng)檢查;然后制作一個新的文件系統(tǒng),確保它是清潔的和不破
碎的。盡可能地均勻分布磁盤I/O,將數(shù)據(jù)庫文件與日志文件分開。
調(diào)整CPU的使用
1.在同一優(yōu)先權(quán)上保持所有Oracle用戶和進(jìn)程
在Oracle中,所有用戶和后臺進(jìn)程操作在同一優(yōu)先級上,修改優(yōu)先權(quán)對競爭和響應(yīng)時間有
例如,若LGWR(日志寫進(jìn)程)獲得低優(yōu)先權(quán),則它不能充分地執(zhí)行,LGWR將成為一個瓶頸
;另一方面,若LGWR有高的優(yōu)先權(quán),用戶進(jìn)程可能要忍受較壞的響應(yīng)時間。
2.在多處理器系統(tǒng)上使用處理器親和力/捆綁
在多處理器環(huán)境中,使用處理器親和力/捆綁(affinity/binding,若它在系統(tǒng)中可用)
。處理器捆綁禁止某進(jìn)程從一個CPU移動到另一個,允許CPU高速緩存中的信息被更好地利用
,而且可以捆綁服務(wù)器進(jìn)程,從而充分利用高速緩存(因為它總是活動的,允許后臺進(jìn)程在
3.為Export(導(dǎo)出)/Import(導(dǎo)入)和SQL?Loader使用單任務(wù)鏈接
若要在用戶和Oracle 8i之間傳輸大量的數(shù)據(jù)(如使用Export/Import),使用單任務(wù)結(jié)構(gòu)
是非常高效的,因為作為單任務(wù)鏈接Oracle可執(zhí)行程序,允許某用戶進(jìn)程直接存取整個SGA。
但運(yùn)行單任務(wù)需要更多的內(nèi)存。為了使用單任務(wù)導(dǎo)入、導(dǎo)出和SQL?Loader(sqlldrst)可執(zhí)行
程序,我們可以調(diào)用make文件的ins_rdbms.mk(在$ORACLE_HOME/rdbms/lib目錄中)。
下面是用于實現(xiàn)單任務(wù)導(dǎo)入、導(dǎo)出和SQL?Loader(sqlldrst)的可執(zhí)行程序:
% cd $ORACLE_HOME/rdbms/lib
% make -f ins_utilities.mk singletask
調(diào)整塊大小和文件大小
在Solaris上,Oracle塊缺省值為2KB,可以設(shè)置的實際大小為2KB的倍數(shù),最大設(shè)置值為
最優(yōu)的塊大小通常是缺省值,但隨著應(yīng)用程序而變化。為了用不同的Oracle塊大小建立數(shù)
db_block_size=new_block_size
調(diào)整Solaris緩沖區(qū)高速緩存大小
為了充分利用原始設(shè)備的優(yōu)點,我們需要調(diào)整Oracle 8i緩沖區(qū)高速緩存的大小和Solaris
Solaris緩沖區(qū)高速緩存由操作系統(tǒng)提供。它在內(nèi)存中保存數(shù)據(jù)的塊(在它們被從內(nèi)存?zhèn)?br /> Oracle 8i緩沖區(qū)高速緩存是在內(nèi)存中保存Oracle數(shù)據(jù)庫緩沖區(qū)的區(qū)域。因為Oracle 8i
可以使用原始設(shè)備,它不需要使用Solaris緩沖區(qū)高速緩存。
在移動原始設(shè)備時,增加Oracle 8i緩沖區(qū)高速緩存的大小。若系統(tǒng)中內(nèi)存的數(shù)量是有限 #p#page_title#e#
Solaris命令sar可以幫助決定哪些緩沖區(qū)高速緩存應(yīng)該增加或減少:
sar -b:報告Solaris緩沖區(qū)高速緩存的活動;
sar -w:報告Solaris內(nèi)存交換活動;
sar -u:報告CPU利用情況;
sar -r:報告內(nèi)存利用情況;
sar -p:報告Solaris內(nèi)存分頁活動。
通常在緩存命中率上升時,我們需要增加Oracle 8i緩沖區(qū)高速緩存的大小,而在交換/分
頁活動變高時,我們需要減少高速緩存的大小。
我們還可以使用Oracle 8i建立的跟蹤(Trace)和警報(Alter)文件來診斷和解決運(yùn)行
只要我們充分利用以上命令和方法,就可以很好地優(yōu)化與調(diào)整Oracle 8i數(shù)據(jù)庫了。
Oracle塊大小應(yīng)該匹配磁盤塊大小或是磁盤塊大小的倍數(shù)。若可能的話,在數(shù)據(jù)庫文件使
用文件系統(tǒng)前在分區(qū)上做文件系統(tǒng)檢查;然后制作一個新的文件系統(tǒng),確保它是清潔的和不破
碎的。盡可能地均勻分布磁盤I/O,將數(shù)據(jù)庫文件與日志文件分開。
調(diào)整CPU的使用
1.在同一優(yōu)先權(quán)上保持所有Oracle用戶和進(jìn)程
在Oracle中,所有用戶和后臺進(jìn)程操作在同一優(yōu)先級上,修改優(yōu)先權(quán)對競爭和響應(yīng)時間有
例如,若LGWR(日志寫進(jìn)程)獲得低優(yōu)先權(quán),則它不能充分地執(zhí)行,LGWR將成為一個瓶頸
;另一方面,若LGWR有高的優(yōu)先權(quán),用戶進(jìn)程可能要忍受較壞的響應(yīng)時間。
2.在多處理器系統(tǒng)上使用處理器親和力/捆綁
在多處理器環(huán)境中,使用處理器親和力/捆綁(affinity/binding,若它在系統(tǒng)中可用)
。處理器捆綁禁止某進(jìn)程從一個CPU移動到另一個,允許CPU高速緩存中的信息被更好地利用
,而且可以捆綁服務(wù)器進(jìn)程,從而充分利用高速緩存(因為它總是活動的,允許后臺進(jìn)程在
3.為Export(導(dǎo)出)/Import(導(dǎo)入)和SQL?Loader使用單任務(wù)鏈接
若要在用戶和Oracle 8i之間傳輸大量的數(shù)據(jù)(如使用Export/Import),使用單任務(wù)結(jié)構(gòu)
是非常高效的,因為作為單任務(wù)鏈接Oracle可執(zhí)行程序,允許某用戶進(jìn)程直接存取整個SGA。
但運(yùn)行單任務(wù)需要更多的內(nèi)存。為了使用單任務(wù)導(dǎo)入、導(dǎo)出和SQL?Loader(sqlldrst)可執(zhí)行
程序,我們可以調(diào)用make文件的ins_rdbms.mk(在$ORACLE_HOME/rdbms/lib目錄中)。
下面是用于實現(xiàn)單任務(wù)導(dǎo)入、導(dǎo)出和SQL?Loader(sqlldrst)的可執(zhí)行程序:
% cd $ORACLE_HOME/rdbms/lib
% make -f ins_utilities.mk singletask
調(diào)整塊大小和文件大小
在Solaris上,Oracle塊缺省值為2KB,可以設(shè)置的實際大小為2KB的倍數(shù),最大設(shè)置值為
最優(yōu)的塊大小通常是缺省值,但隨著應(yīng)用程序而變化。為了用不同的Oracle塊大小建立數(shù)
db_block_size=new_block_size
調(diào)整Solaris緩沖區(qū)高速緩存大小
為了充分利用原始設(shè)備的優(yōu)點,我們需要調(diào)整Oracle 8i緩沖區(qū)高速緩存的大小和Solaris
Solaris緩沖區(qū)高速緩存由操作系統(tǒng)提供。它在內(nèi)存中保存數(shù)據(jù)的塊(在它們被從內(nèi)存?zhèn)?br /> Oracle 8i緩沖區(qū)高速緩存是在內(nèi)存中保存Oracle數(shù)據(jù)庫緩沖區(qū)的區(qū)域。因為Oracle 8i
可以使用原始設(shè)備,它不需要使用Solaris緩沖區(qū)高速緩存。
在移動原始設(shè)備時,增加Oracle 8i緩沖區(qū)高速緩存的大小。若系統(tǒng)中內(nèi)存的數(shù)量是有限 #p#page_title#e#
Solaris命令sar可以幫助決定哪些緩沖區(qū)高速緩存應(yīng)該增加或減少:
sar -b:報告Solaris緩沖區(qū)高速緩存的活動;
sar -w:報告Solaris內(nèi)存交換活動;
sar -u:報告CPU利用情況;
sar -r:報告內(nèi)存利用情況;
sar -p:報告Solaris內(nèi)存分頁活動。
通常在緩存命中率上升時,我們需要增加Oracle 8i緩沖區(qū)高速緩存的大小,而在交換/分
頁活動變高時,我們需要減少高速緩存的大小。
我們還可以使用Oracle 8i建立的跟蹤(Trace)和警報(Alter)文件來診斷和解決運(yùn)行
只要我們充分利用以上命令和方法,就可以很好地優(yōu)化與調(diào)整Oracle 8i數(shù)據(jù)庫了。