文章詳情頁
構(gòu)建高性能Oracle運(yùn)行系統(tǒng)的原則
瀏覽:11日期:2023-11-19 13:24:56
要得到高性能運(yùn)轉(zhuǎn)的Oracle數(shù)據(jù)庫系統(tǒng),首先要做到未雨綢繆,即首先要做好系統(tǒng)規(guī)模與容量的規(guī)劃,要做好這兩方面的規(guī)劃,必須要從三方面考慮: 分別是:CPU利用率,I/O子系統(tǒng)(主要是磁盤)的使用,內(nèi)存使用。 其中CPU利用率與用戶進(jìn)程數(shù)量有關(guān),隨著用戶數(shù)量的增加,用戶進(jìn)程數(shù)量必然增長(zhǎng),所以在選擇CPU時(shí),要優(yōu)先選擇那些主頻高緩存區(qū)大的CPU,而且要預(yù)先對(duì)用戶的增長(zhǎng)趨勢(shì)做好猜測(cè),為CPU的擴(kuò)展做好預(yù)備; 另外在任何系統(tǒng)中的資源都會(huì)由于使用者請(qǐng)求數(shù)量的增加而造成等待排隊(duì),等待排隊(duì)數(shù)量越多,通常系統(tǒng)的響應(yīng)速度越慢,在這方面I/O子系統(tǒng)的表現(xiàn)最為明顯(網(wǎng)絡(luò)子系統(tǒng)與I/O子系統(tǒng)類似,因此也有類似表現(xiàn)),據(jù)權(quán)威測(cè)試結(jié)果顯示,假如對(duì)I/O子系統(tǒng)中的某個(gè)資源(比如磁盤)的過多訪問,造成這種資源的利用率超過其自身極限的80%,那么就會(huì)造成對(duì)這種資源的訪問等待隊(duì)列中的排隊(duì)數(shù)量呈幾何級(jí)數(shù)增長(zhǎng)。 因此為規(guī)避這種對(duì)I/O系統(tǒng)的過載訪問,一般采用RADI陣列技術(shù),Oracle的推薦原則是使用RADI10,這可以做到性能與容錯(cuò)的完美折中,但是價(jià)格上比較昂貴。假如因?yàn)榻?jīng)濟(jì)條件的限制,可以使用RADI5,這是最為經(jīng)濟(jì)的一種規(guī)劃,但是對(duì)寫操作的性能較差,據(jù)成熟經(jīng)驗(yàn)除非應(yīng)用系統(tǒng)的讀寫比例為90%/10%,否則不要使用RADI5,當(dāng)然實(shí)際標(biāo)準(zhǔn)可能不一樣,而且假如I/O非常少,RADI5也沒有問題。 接下來就是內(nèi)存使用問題,這也是最復(fù)雜的方面,因?yàn)樗c操作系統(tǒng),Oracle數(shù)據(jù)庫實(shí)例,應(yīng)用系統(tǒng)本身三方面有關(guān)。 其中前兩方面關(guān)系更為密切,因?yàn)镺racle實(shí)例在運(yùn)行時(shí)是由一系列后臺(tái)進(jìn)程以及這些進(jìn)程所使用的內(nèi)存所組成,進(jìn)程所使用的內(nèi)存就是所謂的系統(tǒng)全局區(qū)SGA,SGA包括固有的兩部分,即數(shù)據(jù)庫高速緩存和重做日志緩沖區(qū),還有一部分稱為共享池,這部分中有一些必須的池如:數(shù)據(jù)字典緩存池等,還有一部分可選池如:大池(用于I/O讀寫)等,這需要根據(jù)系統(tǒng)要提供的功能和服務(wù)來進(jìn)行取舍。 除了SGA還存在PGA,即用戶進(jìn)程所使用的內(nèi)存空間。這部分空間的分配與使用,與操作系統(tǒng)和Oracle本身有關(guān),因此調(diào)整和配置它們也要從這兩方面考慮。 在Oracle9i即以后版本中,可以通過設(shè)定PGA_AGGREGATE_TARGET參數(shù)來指定PGA內(nèi)存大小,一般的原則為用物理內(nèi)存數(shù)減去SGA規(guī)劃的內(nèi)存數(shù)的剩余部分劃分給PGA。SGA運(yùn)行時(shí)位于操作系統(tǒng)的共享內(nèi)存空間中,而PGA位于操作系統(tǒng)堆棧段中,因此SGA運(yùn)行時(shí)不會(huì)被操作系統(tǒng)通過內(nèi)存交換換出到磁盤,而PGA有可能被換出。 對(duì)于大部分的主流操作系統(tǒng)來說,內(nèi)存治理都是采用虛擬內(nèi)存的頁式內(nèi)存治理,這對(duì)Oracle性能會(huì)造成影響,因此要合理調(diào)節(jié)Oracle盡量避免頁式調(diào)度的發(fā)生。因此我強(qiáng)烈推薦在單一主機(jī)上運(yùn)行Oracle,而且只運(yùn)行Oracle。剩下的就是應(yīng)用系統(tǒng)的優(yōu)化問題了,這也包含兩個(gè)方面:(1)程序代碼的編寫;(2)生產(chǎn)數(shù)據(jù)庫的設(shè)計(jì); 首先生產(chǎn)數(shù)據(jù)庫的結(jié)構(gòu)要設(shè)計(jì)合理,包括冗余字段的規(guī)劃、消除冗余的規(guī)劃、索引的建立,簇的建立,是否使用物化視圖,對(duì)大數(shù)據(jù)量的表建立分區(qū),以及優(yōu)化針對(duì)數(shù)據(jù)庫對(duì)象的設(shè)計(jì)(比如塊尺寸的調(diào)整、表的PCTUSED,PCTFREE選項(xiàng)的調(diào)整等),這些都要在設(shè)計(jì)時(shí)更具業(yè)務(wù)特點(diǎn)進(jìn)行考慮,或者在開發(fā)過程中根據(jù)業(yè)務(wù)變化進(jìn)行修正; 其次程序代碼要進(jìn)行合理編寫,比如檢索語句要進(jìn)量使用各種手段進(jìn)行優(yōu)化(如使用線索技術(shù)等,對(duì)于各種優(yōu)化規(guī)則,請(qǐng)參見我的另一篇翻譯文檔《Oracle語句優(yōu)化規(guī)則》),恰當(dāng)合理的利用存儲(chǔ)過程,以及對(duì)存儲(chǔ)過程進(jìn)行優(yōu)化等,這些都要在開發(fā)過程中加以注重。而且還包括編程語言自身(如:Java,C++等)的優(yōu)化(比如使用先進(jìn)算法,合理使用語言,選用更先進(jìn)的編譯技術(shù)等),這是另外的議題,這里我不做討論。 總之建立一個(gè)高性能,健壯的Oracle運(yùn)行系統(tǒng)(也包括其他系統(tǒng)如:DB2系統(tǒng),SQLServer系統(tǒng)等),是要由多方面綜合因素決定的,必須要在這些方面綜合考慮,通盤規(guī)劃才可以。
標(biāo)簽:
Oracle
數(shù)據(jù)庫
排行榜
