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

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