Oracle的內(nèi)存結(jié)構(gòu)包括SGA系統(tǒng)全局區(qū),PGA程序全局區(qū)和軟件代碼區(qū)
1.SGA
?? 所有的用戶進(jìn)程,服務(wù)器進(jìn)程都可以共同使用SGA區(qū),這是不同用戶進(jìn)程與服務(wù)器進(jìn)程進(jìn)行通信的中心。
?? SGA分為如下幾個(gè)部分:
?? 1)數(shù)據(jù)高速緩存
?????? A)用于保存的是最近從數(shù)據(jù)文件中讀取的數(shù)據(jù)塊,或存儲(chǔ)最近經(jīng)常使用的數(shù)據(jù),其中的數(shù)據(jù)可以被所有用戶共享。
?????? B)該部分的大小由初始化參數(shù)DB_CACHE_SIZE指定,一般是數(shù)據(jù)庫(kù)大小的1%
?????? C)該部分又由3個(gè)較小的緩存池組成,每一個(gè)緩存池用來(lái)存儲(chǔ)不同訪問(wèn)特性的數(shù)據(jù),以便提高效率。用戶還可以
?????????? 為特定的對(duì)象(如創(chuàng)建,更改表或索引時(shí))使用storage子句中指定BUFFER_POOL參數(shù)來(lái)設(shè)置該對(duì)象使用
?????????? 緩存池。
?????????? a)keep 保持緩存池:其中的數(shù)據(jù)(即緩存塊)將長(zhǎng)期保存,直到數(shù)據(jù)庫(kù)關(guān)閉。適用于想在內(nèi)存中長(zhǎng)期保存并
?????????????????????? 頻繁訪問(wèn)的對(duì)象,如代碼表。
?????????? b)recycle回收緩存池:其中的數(shù)據(jù)一旦使用完畢就會(huì)被換出。
?????????? c)default默認(rèn)緩存池:對(duì)象默認(rèn)使用該緩存池。oracle使用LRU最近最少使用算法來(lái)?yè)Q出。
?????????? 注意:keep,和recycle的大小由初始化參數(shù)BUFFER_POOL_KEEP和BUFFER_POOL_RECYCLE來(lái)指定
??????????????????? 參數(shù)DB_CACHE_SIZE減去這兩個(gè)參數(shù)的值后余下的就是default的大小
???????D)數(shù)據(jù)高速緩存由許多大小相等的緩存塊組成。大小與OS塊相同??煞譃?類
????????? a)dirty buffers臟緩存塊:當(dāng)一個(gè)SQL語(yǔ)句對(duì)某個(gè)緩存塊中的數(shù)據(jù)進(jìn)行修改后,這個(gè)緩存塊就被標(biāo)記為臟緩存塊,
?????????????????該塊的數(shù)據(jù)將來(lái)會(huì)被持久化到數(shù)據(jù)文件。
??????????b)free buffers空閑緩存塊:這些塊中沒(méi)有數(shù)據(jù),它們?cè)诘却粚懭霐?shù)據(jù)。
????????? c)pinned buffers命中緩存塊:保存的是最近正在被訪問(wèn)的數(shù)據(jù)。這些數(shù)據(jù)將始終被保存在內(nèi)存中。
???????E)Oracle通過(guò)如下2個(gè)列表管理上訴緩存塊:
????????? a)dirty列表:保存已經(jīng)被修改但還沒(méi)有被寫入數(shù)據(jù)文件的臟緩存塊
????????? b)LRU列表:保存命中,空閑以及還沒(méi)被移入dirty列表中的臟緩存塊。LRU列表可以被看成為一個(gè)隊(duì)列。
?????????????????? 被經(jīng)常訪問(wèn)的在隊(duì)頭,放在隊(duì)尾的將最先被移除。
?
2.重做日志高速緩存
?? 用于記錄insert,update,delete語(yǔ)句及create,alter,drop等語(yǔ)句的重做記錄。由參數(shù)log_buffer制定。
3.共享池
???????保存了最近執(zhí)行的SQL語(yǔ)句,PL/SQL過(guò)程與包,數(shù)據(jù)字典信息,鎖,以及其他控制結(jié)構(gòu)信息。它是對(duì)SQL,
?? PL/SQL進(jìn)行語(yǔ)法解析,編譯,執(zhí)行的內(nèi)存區(qū),主要由數(shù)據(jù)字典緩存區(qū)和庫(kù)緩存區(qū)組成。由shared_pool_size指定。
?? 1)數(shù)據(jù)字典緩存(dictionary cache)
?????? A)用于存儲(chǔ)最近經(jīng)常使用的數(shù)據(jù)字典信息,如表定義,列定義,用戶名,口令,權(quán)限,數(shù)據(jù)庫(kù)的結(jié)構(gòu)等信息。
?????? B)Oracle運(yùn)行時(shí)需訪問(wèn)數(shù)據(jù)字典來(lái)解析SQL,確定對(duì)象是否存在,驗(yàn)證權(quán)限。如果數(shù)據(jù)在緩存中不存在,
????????? 則取讀取數(shù)據(jù)字典的數(shù)據(jù)文件。
?????? C)數(shù)據(jù)字典緩存中存儲(chǔ)的是一條一條的記錄,而其他緩存區(qū)保存的是數(shù)據(jù)塊
?? 2)庫(kù)緩存
????????用于保存最近解析過(guò)的SQL語(yǔ)句PL/SQL
??????? Oralce將每條SQL分解為可共享和不可共享的部分,分別存儲(chǔ)在共享SQL區(qū)和私有SQL區(qū)
??????? A)共享SQL區(qū):存儲(chǔ)的是最近執(zhí)行的SQL語(yǔ)句,解析后的語(yǔ)法樹(shù)和優(yōu)化后的執(zhí)行計(jì)劃
??????? B)私有SQL區(qū):存儲(chǔ)與會(huì)話和用戶相關(guān)的私有信息,如:綁定變量,環(huán)境,和會(huì)話參數(shù)。
??????? C)PL/SQL過(guò)程和包區(qū):存儲(chǔ)PL/SQL解析的執(zhí)行代碼。PL/SQL中的SQL還是存儲(chǔ)在共享SQL區(qū)中
??????? D)鎖與其他控制結(jié)構(gòu)區(qū):存儲(chǔ)Oracle實(shí)例內(nèi)部操作所需要的信息,如各種鎖,閂,寄存器值等。后臺(tái)進(jìn)程需要
?????????????? 訪問(wèn)他們。
4.大池(可選)
?? 大池用于為需要大內(nèi)存的操作提供相對(duì)獨(dú)立的內(nèi)存空間,以便提高這些操作的性能。通過(guò)large_pool_size確定大小
?? 需要大量?jī)?nèi)存的操作包括:
?? 1)數(shù)據(jù)庫(kù)備份和恢復(fù),如使用RMAN在磁帶設(shè)備上執(zhí)行備份,轉(zhuǎn)儲(chǔ),恢復(fù)等操作。
?? 2)具有大量排序操作的SQL語(yǔ)句。
?? 3)并行化的數(shù)據(jù)庫(kù)操作。
?? 注意:如果沒(méi)有在SGA區(qū)中創(chuàng)建大池,上訴操作所需的內(nèi)存空間將占據(jù)共享池的內(nèi)存
5.Java池(可選)
?? 在Oracle 8i之后,Oracle增加了對(duì)Java語(yǔ)言的支持,提供了Java池,用于存放Java代碼,Java語(yǔ)句的語(yǔ)法分析表
?? Java語(yǔ)句的執(zhí)行方案和進(jìn)行Java程序開(kāi)發(fā)。使用java_pool_size確定大小
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
