Oracle內(nèi)存結(jié)構(gòu)的相關(guān)篇SGA
以下的文章主要介紹的是Oracle內(nèi)存結(jié)構(gòu)的相關(guān)研究-SGA篇,前兩天我在《Oracle內(nèi)存結(jié)構(gòu)研究-PGA篇》中看到有關(guān)于PGA的介紹。PGA作為一個服務器進程的專用的私有內(nèi)存區(qū),而SGA則是共享內(nèi)存區(qū)。
在《Oracle內(nèi)存結(jié)構(gòu)研究-PGA篇》一文中提到,PGA是一個服務器進程的專用的私有內(nèi)存區(qū),而SGA則是共享內(nèi)存區(qū)。
SGA由多個部分組成:
1, 固定SGA(Fixed SGA)
2, 塊緩沖區(qū)(Db cache)
3, 重做日志緩沖區(qū)(Redo log buffer)
4, Java池(Java pool)
5, 大池(Large pool)
6, 共享池(Shared pool)
7, 流池(Stream pool)
有如下參數(shù)控制共享池相關(guān)組件大?。?/p>
1, JAVA_POOL_SIZE:控制Java池大小。
2, SHARED_POOL_SIZE:9i中控制共享池中占用***的部分,10g以上控制共享池大小。
3, LARGE_POOL_SIZE:控制大池大小。
4, DB_*K_CACHE_SIZE:控制不同塊大小的緩沖區(qū)大小。
5, LOG_BUFFER:控制重做日志緩沖區(qū)大小。
6, SGA_TARGET:10g以上控制自動SGA內(nèi)存管理的總內(nèi)存大小。
7, SGA_MAX_SIZE:控制SGA可以達到的***大小,改變需重啟數(shù)據(jù)庫。
下面將詳細介紹在Oracle內(nèi)存結(jié)構(gòu)研究-SGA篇 中各個部分的作用和推薦設置。
二、SGA各組件作用
1, 固定SGA:
顧名思義,是一段不變的內(nèi)存區(qū),指向SGA中其他部分,Oracle通過它找到SGA中的其他區(qū),可以簡單理解為用于管理的一段內(nèi)存區(qū)。
2, 塊緩沖區(qū):
查詢時,Oracle會先把從磁盤讀取的數(shù)據(jù)放入內(nèi)存,以后再查詢相關(guān)數(shù)據(jù)時不用再次讀取磁盤。插入和更新時,Oracle會現(xiàn)在該區(qū)中緩存數(shù)據(jù),之后批量寫到硬盤中。通過塊緩沖區(qū),Oracle可以通過內(nèi)存緩存提高磁盤的I/O性能。
塊緩沖區(qū)中有三個區(qū)域:
默認池(Default pool):所有數(shù)據(jù)默認都在這里緩存。
保持池(Keep pool):用來緩存需要多次重用的數(shù)據(jù)。
回收池(Recycle pool):用來緩存很少重用的數(shù)據(jù)。
原來只有一個默認池,所有數(shù)據(jù)都在這里緩存。這樣會產(chǎn)生一個問題:大量很少重用的數(shù)據(jù)會把需重用的數(shù)據(jù)“擠出”緩沖區(qū),造成磁盤I/O增加,運行速度下降。后來分出了保持池和回收池根據(jù)是否經(jīng)常重用來分別緩存數(shù)據(jù)。
這三部分內(nèi)存區(qū)需要手動確定大小,并且之間沒有共享。例如:保持池中已經(jīng)滿了,而回收池中還有大量空閑內(nèi)存,這時回收池的內(nèi)存不會分配給保持池。
9i開始,還可以設置db_nk_cache。9i之前數(shù)據(jù)庫只能使用相同的塊大小。9i開始同一個數(shù)據(jù)庫可以使用多種塊大?。?KB,4KB,8KB,16KB,32KB),這些塊需要在各自的db_nk_cache中緩存。如果為不同的表空間指定了不同的塊大小,需要為其設置各自的緩沖區(qū)。
3, 重做日志緩沖區(qū)(Redo log buffer):
數(shù)據(jù)寫到重做日志文件之前在這里緩存,在以下情況中觸發(fā):
每隔3秒
緩存達到1MB或1/3滿時
用戶提交時
緩沖區(qū)的數(shù)據(jù)寫入磁盤前
上述的相關(guān)內(nèi)容就是對Oracle內(nèi)存結(jié)構(gòu)研究-SGA篇的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】