国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Oracle內(nèi)存全面分析(1)[HelloDBA.COM]
Oracle的內(nèi)存配置與oracle性能息息相關(guān)。而且關(guān)于內(nèi)存的錯(cuò)誤(如4030、4031錯(cuò)誤)都是十分令人頭疼的問(wèn)題??梢哉f(shuō),關(guān)于內(nèi)存的配置,是最影響Oracle性能的配置。內(nèi)存還直接影響到其他兩個(gè)重要資源的消耗:CPU和IO。
首先,看看Oracle內(nèi)存存儲(chǔ)的主要內(nèi)容是什么:
程序代碼(PLSQL、Java);
關(guān)于已經(jīng)連接的會(huì)話的信息,包括當(dāng)前所有活動(dòng)和非活動(dòng)會(huì)話;
程序運(yùn)行時(shí)必須的相關(guān)信息,例如查詢計(jì)劃;
Oracle進(jìn)程之間共享的信息和相互交流的信息,例如鎖;
那些被永久存儲(chǔ)在外圍存儲(chǔ)介質(zhì)上,被cache在內(nèi)存中的數(shù)據(jù)(如redo log條目,數(shù)據(jù)塊)。
此外,需要記住的一點(diǎn)是,Oracle的內(nèi)存是與實(shí)例對(duì)應(yīng)的。也就是說(shuō),一個(gè)實(shí)例就有一個(gè)獨(dú)立的內(nèi)存結(jié)構(gòu)。
先從Oracle內(nèi)存的組成架構(gòu)介紹。
1.   Oracle的內(nèi)存架構(gòu)組成
Oracle的內(nèi)存,從總體上講,可以分為兩大塊:共享部分(主要是SGA)和進(jìn)程獨(dú)享部分(主要是PGA和UGA)。而這兩部分內(nèi)存里面,根據(jù)功能不同,還分為不同內(nèi)存池(Pool)和內(nèi)存區(qū)(Area)。下面就是Oracle內(nèi)存構(gòu)成框架圖:
SGA
Share Pool
Buffer Cache
Redo Log Buffer
Java Pool
Stream Pool(10g)
Large Pool
PGA*n
Bitmap merge area
Sort Area
Hash Area
UGA*n
CUA*n
下面分別介紹這兩塊內(nèi)存區(qū)。
1.1.            SGA(System Global Area)
SGA(System Global Area 系統(tǒng)全局區(qū)域)是一組包含一個(gè)Oracle實(shí)例的數(shù)據(jù)和控制信息的共享內(nèi)存結(jié)構(gòu)。這句話可以說(shuō)是SGA的定義。雖然簡(jiǎn)單,但其中闡述了SGA幾個(gè)很重要的特性:1、SGA的構(gòu)成——數(shù)據(jù)和控制信息,我們下面會(huì)詳細(xì)介紹;2、SGA是共享的,即當(dāng)有多個(gè)用戶同時(shí)登錄了這個(gè)實(shí)例,SGA中的信息可以被它們同時(shí)訪問(wèn)(當(dāng)涉及到互斥的問(wèn)題時(shí),由latch和enquence控制);3、一個(gè)SGA只服務(wù)于一個(gè)實(shí)例,也就是說(shuō),當(dāng)一臺(tái)機(jī)器上有多個(gè)實(shí)例運(yùn)行時(shí),每個(gè)實(shí)例都有一個(gè)自己的SGA,盡管SGA來(lái)自于OS的共享內(nèi)存區(qū),但實(shí)例之間不能相互訪問(wèn)對(duì)方的SGA區(qū)。
Oracle進(jìn)程和一個(gè)SGA就構(gòu)成了一個(gè)Oracle實(shí)例。當(dāng)實(shí)例啟動(dòng)時(shí),Oracle會(huì)自動(dòng)從系統(tǒng)中分配內(nèi)存給SGA,而實(shí)例關(guān)閉時(shí),操作系統(tǒng)會(huì)回收這些內(nèi)存。下面就是當(dāng)實(shí)例啟動(dòng)后,顯示已經(jīng)分配了SGA:
SQL> startup ORACLE instance started.   Total System Global Area  289406976 bytes Fixed Size                  1248576 bytes Variable Size             117441216 bytes Database Buffers          163577856 bytes Redo Buffers                7139328 bytes Database mounted. Database opened.   SQL>
SGA區(qū)是可讀寫的。所有登錄到實(shí)例的用戶都能讀取SGA中的信息,而在oracle做執(zhí)行操作時(shí),服務(wù)進(jìn)程會(huì)將修改的信息寫入SGA區(qū)。
SGA主要包括了以下的數(shù)據(jù)結(jié)構(gòu):
數(shù)據(jù)緩沖(Buffer Cache)
重做日志緩沖(Redo Log Buffer)
共享池(Shared Pool)
Java池(Java Pool)
大池(Large Pool)
流池(Streams Pool --- 10g以后才有)
數(shù)據(jù)字典緩存(Data Dictionary Cache)
其他信息(如數(shù)據(jù)庫(kù)和實(shí)例的狀態(tài)信息)
最后的兩種內(nèi)存信息會(huì)被實(shí)例的后臺(tái)進(jìn)程所訪問(wèn),它們?cè)趯?shí)例啟動(dòng)后就固定在SGA中了,而且不會(huì)改變,所以這部分又稱為固定SGA(Fixed SGA)。這部分區(qū)域的大小一般小于100K。
此外,用于并非進(jìn)程控制的鎖(latch)的信息也包含在SGA區(qū)中。
Shared Pool、Java Pool、Large Pool和Streams Pool這幾塊內(nèi)存區(qū)的大小是相應(yīng)系統(tǒng)參數(shù)設(shè)置而改變的,所以有通稱為可變SGA(Variable SGA)。
1.1.1.   SGA的重要參數(shù)和特性
在設(shè)置SGA時(shí),有一些很重要的參數(shù),它們?cè)O(shè)置正確與否,會(huì)直接影響到系統(tǒng)的整體性能。下面一一介紹他們:
·        SGA_MAX_SIZE
SGA區(qū)包括了各種緩沖區(qū)和內(nèi)存池,而大部分都可以通過(guò)特定的參數(shù)來(lái)指定他們的大小。但是,作為一個(gè)昂貴的資源,一個(gè)系統(tǒng)的物理內(nèi)存大小是有限。盡管對(duì)于CPU的內(nèi)存尋址來(lái)說(shuō),是無(wú)需關(guān)系實(shí)際的物理內(nèi)存大小的(關(guān)于這一點(diǎn),后面會(huì)做詳細(xì)的介紹),但是過(guò)多的使用虛擬內(nèi)存導(dǎo)致page in/out,會(huì)大大影響系統(tǒng)的性能,甚至可能會(huì)導(dǎo)致系統(tǒng)crash。所以需要有一個(gè)參數(shù)來(lái)控制SGA使用虛擬內(nèi)存的最大大小,這個(gè)參數(shù)就是SGA_MAX_SIZE。
當(dāng)實(shí)例啟動(dòng)后,各個(gè)內(nèi)存區(qū)只分配實(shí)例所需要的最小大小,在隨后的運(yùn)行過(guò)程中,再根據(jù)需要擴(kuò)展他們的大小,而他們的總和大小受到了SGA_MAX_SIZE的限制。
當(dāng)試圖增加一個(gè)內(nèi)存的大小,并且如果這個(gè)值導(dǎo)致所有內(nèi)存區(qū)大小總和大于SGA_MAX_SIZE時(shí),oracle會(huì)提示錯(cuò)誤,不允許修改。
當(dāng)然,如果在設(shè)置參數(shù)時(shí),指定區(qū)域?yàn)閟pfile時(shí)(包括修改SGA_MAX_SIZE本身),是不會(huì)受到這個(gè)限制的。這樣就可能出現(xiàn)這樣的情況,在spfile中,SGA各個(gè)內(nèi)存區(qū)設(shè)置大小總和大于SGA_MAX_SIZE。這時(shí),oracle會(huì)如下處理:當(dāng)實(shí)例再次啟動(dòng)時(shí),如果發(fā)現(xiàn)SGA各個(gè)內(nèi)存總和大于SGA_MAX_SIZE,它會(huì)將SGA_MAX_SIZE的值修改為SGA各個(gè)內(nèi)存區(qū)總和的值。
SGA所分配的是虛擬內(nèi)存,但是,在我們配置SGA時(shí),一定要使整個(gè)SGA區(qū)都在物理內(nèi)存中,否則,會(huì)導(dǎo)致SGA頻繁的頁(yè)入/頁(yè)出,會(huì)極大影響系統(tǒng)性能。
對(duì)于OLTP系統(tǒng),我個(gè)人建議可以如下配置SGA_MAX_SIZE(一般有經(jīng)驗(yàn)的DBA都會(huì)有自己的默認(rèn)配置大小,你也可以通過(guò)一段時(shí)間的觀察、調(diào)整自己的系統(tǒng)來(lái)得到適合本系統(tǒng)的參數(shù)配置):
系統(tǒng)內(nèi)存
SGA_MAX_SIZE值
1G
400-500M
2G
1G
4G
2500M
8G
5G
SGA的實(shí)際大小可以通過(guò)以下公式估算:
SGA實(shí)際大小 = DB_CACHE_SIZE + DB_KEEP_CACHE_SIZE + DB_RECYCLE_CACHE_SIZE + DB_nk_CACHE_SIZE + SHARED_POOL_SIZE + LARGE_POOL_SIZE + JAVA_POOL_SIZE + STREAMS_POOL_SIZE(10g中的新內(nèi)存池) + LOG_BUFFERS+11K(Redo Log Buffer的保護(hù)頁(yè)) + 1MB + 16M(SGA內(nèi)部?jī)?nèi)存消耗,適合于9i及之前版本)
公式種涉及到的參數(shù)在下面的內(nèi)容種會(huì)一一介紹。
·        PRE_PAGE_SGA
我們前面提到,oracle實(shí)例啟動(dòng)時(shí),會(huì)只載入各個(gè)內(nèi)存區(qū)最小的大小。而其他SGA內(nèi)存只作為虛擬內(nèi)存分配,只有當(dāng)進(jìn)程touch到相應(yīng)的頁(yè)時(shí),才會(huì)置換到物理內(nèi)存中。但我們也許希望實(shí)例一啟動(dòng)后,所有SGA都分配到物理內(nèi)存。這時(shí)就可以通過(guò)設(shè)置PRE_PAGE_SGA參數(shù)來(lái)達(dá)到目的了。
這個(gè)參數(shù)的默認(rèn)值為FALSE,即不將全部SGA置入物理內(nèi)存中。當(dāng)設(shè)置為TRUE時(shí),實(shí)例啟動(dòng)會(huì)將全部SGA置入物理內(nèi)存中。它可以使實(shí)例啟動(dòng)達(dá)到它的最大性能狀態(tài),但是,啟動(dòng)時(shí)間也會(huì)更長(zhǎng)(因?yàn)闉榱耸顾蠸GA都置入物理內(nèi)存中,oracle進(jìn)程需要touch所有的SGA頁(yè))。
我們可以通過(guò)TopShow工具(本站原創(chuàng)工具,可在http://www.HelloDBA.com/Download/TopShow.html中下載)來(lái)觀察windows(Unix下的內(nèi)存監(jiān)控比較復(fù)雜,這里暫不舉例)下參數(shù)修改前后的對(duì)比。
PRE_PAGE_SGA為FALSE:
SQL> show parameter sga   NAME                                 TYPE        VALUE ------------------------------------ ----------- -------------------------- lock_sga                             boolean     FALSE pre_page_sga                         boolean     FALSE sga_max_size                         big integer 276M sga_target                           big integer 276M SQL> startup force ORACLE instance started.   Total System Global Area  289406976 bytes Fixed Size                  1248576 bytes Variable Size             117441216 bytes Database Buffers          163577856 bytes Redo Buffers                7139328 bytes Database mounted. Database opened. SQL> 啟動(dòng)后,Oracle的內(nèi)存情況
可以看到,實(shí)例啟動(dòng)后,oracle占用的物理內(nèi)存只有168M,遠(yuǎn)小于SGA的最大值288M(實(shí)際上,這部分物理內(nèi)存中還有一部分進(jìn)程的PGA和Oracle Service占用的內(nèi)存),而虛擬內(nèi)存則為340M。
將PRE_PAGE_SGA修改為TRUE,重啟實(shí)例:
SQL> alter system set pre_page_sga=true scope=spfile;   System altered.   SQL> startup force ORACLE instance started.   Total System Global Area  289406976 bytes Fixed Size                  1248576 bytes Variable Size             117441216 bytes Database Buffers          163577856 bytes Redo Buffers                7139328 bytes Database mounted. Database opened. 再觀察啟動(dòng)后Oracle的內(nèi)存分配情況:
這時(shí)看到,實(shí)例啟動(dòng)后物理內(nèi)存達(dá)到了最大343M,于虛擬內(nèi)存相當(dāng)。這時(shí),oracle實(shí)例已經(jīng)將所有SGA分配到物理內(nèi)存。
當(dāng)參數(shù)設(shè)置為TRUE時(shí),不僅在實(shí)例啟動(dòng)時(shí),需要touch所有的SGA頁(yè),并且由于每個(gè)oracle進(jìn)程都會(huì)訪問(wèn)SGA區(qū),所以每當(dāng)一個(gè)新進(jìn)程啟動(dòng)時(shí)(在Dedicated Server方式中,每個(gè)會(huì)話都會(huì)啟動(dòng)一個(gè)Oracle進(jìn)程),都會(huì)touch一遍該進(jìn)程需要訪問(wèn)的所有頁(yè)。因此,每個(gè)進(jìn)程的啟動(dòng)時(shí)間頁(yè)增長(zhǎng)了。所以,這個(gè)參數(shù)的設(shè)置需要根據(jù)系統(tǒng)的應(yīng)用情況來(lái)設(shè)定。
在這種情況下,進(jìn)程啟動(dòng)時(shí)間的長(zhǎng)短就由系統(tǒng)內(nèi)存的頁(yè)的大小來(lái)決定了。例如,SGA大小為100M,當(dāng)頁(yè)的大小為4K時(shí),進(jìn)程啟動(dòng)時(shí)需要訪問(wèn)100000/4=25000個(gè)頁(yè),而如果頁(yè)大小為4M時(shí),進(jìn)程只需要訪問(wèn)100/4=25個(gè)頁(yè)。頁(yè)的大小是由操作系統(tǒng)指定的,并且是無(wú)法修改的。
但是,要記住一點(diǎn):PRE_PAGA_SGA只是在啟動(dòng)時(shí)將物理內(nèi)存分配給SGA,但并不能保證系統(tǒng)在以后的運(yùn)行過(guò)程不會(huì)將SGA中的某些頁(yè)置換到虛擬內(nèi)存中,也就是說(shuō),盡管設(shè)置了這個(gè)參數(shù),還是可能出現(xiàn)Page In/Out。如果需要保障SGA不被換出,就需要由另外一個(gè)參數(shù)LOCK_SGA來(lái)控制了。
·        LOCK_SGA
上面提到,為了保證SGA都被鎖定在物理內(nèi)存中,而不必頁(yè)入/頁(yè)出,可以通過(guò)參數(shù)LOCK_SGA來(lái)控制。這個(gè)參數(shù)默認(rèn)值為FALSE,當(dāng)指定為TRUE時(shí),可以將全部SGA都鎖定在物理內(nèi)存中。當(dāng)然,有些系統(tǒng)不支持內(nèi)存鎖定,這個(gè)參數(shù)也就無(wú)效了。
·        SGA_TARGET
這里要介紹的時(shí)Oracle10g中引入的一個(gè)非常重要的參數(shù)。在10g之前,SGA的各個(gè)內(nèi)存區(qū)的大小都需要通過(guò)各自的參數(shù)指定,并且都無(wú)法超過(guò)參數(shù)指定大小的值,盡管他們之和可能并沒有達(dá)到SGA的最大限制。此外,一旦分配后,各個(gè)區(qū)的內(nèi)存只能給本區(qū)使用,相互之間是不能共享的。拿SGA中兩個(gè)最重要的內(nèi)存區(qū)Buffer Cache和Shared Pool來(lái)說(shuō),它們兩個(gè)對(duì)實(shí)例的性能影響最大,但是就有這樣的矛盾存在:在內(nèi)存資源有限的情況下,某些時(shí)候數(shù)據(jù)被cache的需求非常大,為了提高buffer hit,就需要增加Buffer Cache,但由于SGA有限,只能從其他區(qū)“搶”過(guò)來(lái)——如縮小Shared Pool,增加Buffer Cache;而有時(shí)又有大塊的PLSQL代碼被解析駐入內(nèi)存中,導(dǎo)致Shared Pool不足,甚至出現(xiàn)4031錯(cuò)誤,又需要擴(kuò)大Shared Pool,這時(shí)可能又需要人為干預(yù),從Buffer Cache中將內(nèi)存奪回來(lái)。
有了這個(gè)新的特性后,SGA中的這種內(nèi)存矛盾就迎刃而解了。這一特性被稱為自動(dòng)共享內(nèi)存管理(Automatic Shared Memory Management ASMM)。而控制這一特性的,也就僅僅是這一個(gè)參數(shù)SGA_TARGE。設(shè)置這個(gè)參數(shù)后,你就不需要為每個(gè)內(nèi)存區(qū)來(lái)指定大小了。SGA_TARGET指定了SGA可以使用的最大內(nèi)存大小,而SGA中各個(gè)內(nèi)存的大小由Oracle自行控制,不需要人為指定。Oracle可以隨時(shí)調(diào)節(jié)各個(gè)區(qū)域的大小,使之達(dá)到系統(tǒng)性能最佳狀態(tài)的個(gè)最合理大小,并且控制他們之和在SGA_TARGET指定的值之內(nèi)。一旦給SGA_TARGET指定值后(默認(rèn)為0,即沒有啟動(dòng)ASMM),就自動(dòng)啟動(dòng)了ASMM特性。
設(shè)置了SGA_TARGET后,以下的SGA內(nèi)存區(qū)就可以由ASMM來(lái)自動(dòng)調(diào)整:
共享池(Shared Pool)
Java池(Java Pool)
大池(Large Pool)
數(shù)據(jù)緩存區(qū)(Buffer Cache)
流池(Streams Pool)
對(duì)于SGA_TARGET的限制,它的大小是不能超過(guò)SGA_MAX_SIZE的大小的。
SQL> show parameter sga   NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ lock_sga                             boolean     FALSE pre_page_sga                         boolean     FALSE sga_max_size                         big integer 276M sga_target                           big integer 276M SQL> SQL> SQL> SQL> alter system set sga_target=280M; alter system set sga_target=280M * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-00823: Specified value of sga_target greater than sga_max_size 另外,當(dāng)指定SGA_TARGET小于SGA_MAX_SIZE,實(shí)例重啟后,SGA_MAX_SIZE就自動(dòng)變?yōu)楹蚐GA_TARGET一樣的值了。
SQL> show parameter sga   NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ lock_sga                             boolean     FALSE pre_page_sga                         boolean     FALSE sga_max_size                         big integer 276M sga_target                           big integer 276M   SQL> alter system set sga_target=252M;   System altered.   SQL> show parameter sga   NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ lock_sga                             boolean     FALSE pre_page_sga                         boolean     FALSE sga_max_size                         big integer 276M sga_target                           big integer 252M   SQL> startup force ORACLE instance started.   Total System Global Area  264241152 bytes Fixed Size                  1248428 bytes Variable Size             117441364 bytes Database Buffers          138412032 bytes Redo Buffers                7139328 bytes Database mounted. Database opened. SQL> show parameter sga   NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ lock_sga                             boolean     FALSE pre_page_sga                         boolean     FALSE sga_max_size                         big integer 252M sga_target                           big integer 252M SQL> 對(duì)于SGA_TARGET,還有重要一點(diǎn)就是,它的值可以動(dòng)態(tài)修改(在SGA_MAX_SIZE范圍內(nèi))。在10g之前,如果需要修改SGA的大?。葱薷腟GA_MAX_SIZE的值)需要重啟實(shí)例才能生效。當(dāng)然,在10g中,修改SGA_MAX_SIZE的值還是需要重啟的。但是有了SGA_TARGET后,可以將SGA_MAX_SIZE設(shè)置偏大,再根據(jù)實(shí)際需要調(diào)整SGA_TARGET的值(我個(gè)人不推薦頻繁修改SGA的大小,SGA_TARGET在實(shí)例啟動(dòng)時(shí)設(shè)置好,以后不要再修改)。
SGA_TARGET帶來(lái)一個(gè)重要的好處就是,能使SGA的利用率達(dá)到最佳,從而節(jié)省內(nèi)存成本。因?yàn)锳SMM啟動(dòng)后,Oracle會(huì)自動(dòng)根據(jù)需要調(diào)整各個(gè)區(qū)域的大小,大大減少了某些區(qū)域內(nèi)存緊張,而某些區(qū)域又有內(nèi)存空閑的矛盾情況出現(xiàn)。這也同時(shí)大大降低了出現(xiàn)4031錯(cuò)誤的幾率。
這個(gè)參數(shù)使32位平臺(tái)使用擴(kuò)展緩沖緩存基址,以支持支持4GB多物理內(nèi)存。設(shè)置此參數(shù),可以使SGA突破在32位系統(tǒng)中的2G最大限制。64位平臺(tái)中,這個(gè)參數(shù)被忽略。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ORACLE10--SGA_MAX_SIZE與SGA_TARGET
設(shè)置SGA的原則以及修改它的大小
對(duì)oracle實(shí)例的內(nèi)存(SGA和PGA)進(jìn)行調(diào)整,優(yōu)化數(shù)據(jù)庫(kù)性
Linux內(nèi)核參數(shù)和Oracle相關(guān)參數(shù)調(diào)整
Oracle參數(shù)的設(shè)置
32Windows 上Oracle突破1.7G內(nèi)存限制(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服