資源描述:
《oracle 11g優(yōu)化指南》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Oracle內(nèi)存全面解析Oracle的內(nèi)存配置與oracle性能息息相關(guān)。而且關(guān)于內(nèi)存的錯誤(如4030、4031錯誤)都是十分令人頭疼的問題??梢哉f,關(guān)于內(nèi)存的配置,是最影響Oracle性能的配置。內(nèi)存還直接影響到其他兩個重要資源的消耗:CPU和IO首先,看看Oracle內(nèi)存存儲的主要內(nèi)容是什么:程序代碼(PLSQL、Java);關(guān)于已經(jīng)連接的會話的信息,包括當(dāng)前所有活動和非活動會話;程序運(yùn)行時必須的相關(guān)信息,例如查詢計劃;Oracle進(jìn)程之間共享的信息和相互交流的信息,例如鎖;那些被永久存儲在外圍存儲介質(zhì)上,被cache在內(nèi)存中的數(shù)據(jù)(如redolog條目,數(shù)據(jù)塊)。此外,需要記住的一點(diǎn)
2、是,Oracle的內(nèi)存是與實例對應(yīng)的。也就是說,一個實例就有一個獨(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?SharePool?BufferCache?RedoLogBuffer?JavaPool?StreamPool(10g)?LargePool?PGA*nBitmapmergeareaSortAreaHashA
3、rea?UGA*nCUA*n下面分別介紹這兩塊內(nèi)存區(qū)1.1.???????????SGA(SystemGlobalArea)SGA(SystemGlobalArea系統(tǒng)全局區(qū)域)是一組包含一個Oracle實例的數(shù)據(jù)和控制信息的共享內(nèi)存結(jié)構(gòu)。Oracle進(jìn)程和一個SGA就構(gòu)成了一個Oracle實例。當(dāng)實例啟動時,Oracle會自動從系統(tǒng)中分配內(nèi)存給SGA,而實例關(guān)閉時,操作系統(tǒng)會回收這些內(nèi)存。下面就是當(dāng)實例啟動后,顯示已經(jīng)分配了SGA:SQL>startupORACLEinstancestarted.TotalSystemGlobalArea?289406976bytesFixedSize??
4、???????????????1248576bytesVariableSize????????????117441216bytesDatabaseBuffers?????????163577856bytesRedoBuffers???????????????7139328bytesDatabasemounted.Databaseopened.SQL>SGA區(qū)是可讀寫的。所有登錄到實例的用戶都能讀取SGA中的信息,而在oracle做執(zhí)行操作時,服務(wù)進(jìn)程會將修改的信息寫入SGA區(qū)SGA主要包括了以下的數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)緩沖(BufferCache)重做日志緩沖(RedoLogBuffer)共享池(S
5、haredPool)Java池(JavaPool)大池(LargePool)流池(StreamsPool---10g以后才有)數(shù)據(jù)字典緩存(DataDictionaryCache)其他信息(如數(shù)據(jù)庫和實例的狀態(tài)信息)最后的兩種內(nèi)存信息會被實例的后臺進(jìn)程所訪問,它們在實例啟動后就固定在SGA中了,而且不會改變,所以這部分又稱為固定SGA(FixedSGA)。這部分區(qū)域的大小一般小于100K此外,用于并非進(jìn)程控制的鎖(latch)的信息也包含在SGA區(qū)中SharedPool、JavaPool、LargePool和StreamsPool這幾塊內(nèi)存區(qū)的大小是相應(yīng)系統(tǒng)參數(shù)設(shè)置而改變的,所以有通稱為可變
6、SGA(VariableSGA)1.1.1.??SGA的重要參數(shù)和特性在設(shè)置SGA時,有一些很重要的參數(shù),它們設(shè)置正確與否,會直接影響到系統(tǒng)的整體性能。下面一一介紹他們:·???????SGA_MAX_SIZESGA區(qū)包括了各種緩沖區(qū)和內(nèi)存池,而大部分都可以通過特定的參數(shù)來指定他們的大小。當(dāng)實例啟動后,各個內(nèi)存區(qū)只分配實例所需要的最小大小,在隨后的運(yùn)行過程中,再根據(jù)需要擴(kuò)展他們的大小,而他們的總和大小受到了SGA_MAX_SIZE的限制當(dāng)試圖增加一個內(nèi)存的大小,并且如果這個值導(dǎo)致所有內(nèi)存區(qū)大小總和大于SGA_MAX_SIZE時,oracle會提示錯誤,不允許修改當(dāng)然,如果在設(shè)置參數(shù)時,指定區(qū)
7、域為spfile時(包括修改SGA_MAX_SIZE本身),是不會受到這個限制的。這樣就可能出現(xiàn)這樣的情況,在spfile中,SGA各個內(nèi)存區(qū)設(shè)置大小總和大于SGA_MAX_SIZE。這時,oracle會如下處理:當(dāng)實例再次啟動時,如果發(fā)現(xiàn)SGA各個內(nèi)存總和大于SGA_MAX_SIZE,它會將SGA_MAX_SIZE的值修改為SGA各個內(nèi)存區(qū)總和的值SGA所分配的是虛擬內(nèi)存,但是,在我們配置SGA時,一定要使