Oracle shared pool

winston_DBA發表於2015-04-10


一、oracle共享池包含了多種程式資料。例如:解析後的SQLPL/SQL程式碼,系統引數和資料字典資訊。基本上資料庫的所有操作都和共享池有關。共享池主要包括library cache , data dictionary cache , server result cache , reserved pool

二、庫快取(library cache

   1.庫快取中主要存放已經共享的可執行的SQL或者PL/SQ程式碼,還有一些控制結構例如locklibrary cache handler。在共享伺服器模式,庫快取還包括了private SQL area(專有伺服器模式存在於PGA內)

   2.共享SQL區:資料庫使用共享SQL區域來處理SQL語句的第一次出現,這個區域可以被所有使用者訪問,並且包括解析樹和執行計劃。

   3.私有SQL區:每個發起SQL的會話都在PGA有私有SQL區域。

   4當客戶端發起請求並連線到SGA時,首先檢視shared SQL area是否存在和請求SQL語句語法和語義相同的語句,如果存在,則直接使用相關的執行計劃;若不存在,則在shared SQL area申請一塊新的空間。

接著,根據伺服器的工作方式,分配private SQL area:共享伺服器模式下,部分private SQL area存在於SGA,專有伺服器下,存在與PGA中。

   5.程式單元(program unit):庫快取中存放的可執行的PL/SQL程式碼和JAVA類程式碼。

三、共享池的記憶體分配和回收

   1.當一條SQL語句被解析時,資料庫便分配共享池記憶體,分配的記憶體大小取決於SQL語句的複雜程度。

   2.一般,共享池裡的內容根據LRU演算法來管理。

   3.以下情況也會導致shared SQL area從共享池中移除:

(1).當對錶、聚簇表或者索引進行統計資訊收集時,在shared SQL area中存在的涉及到統計資訊收集的物件的內容,將會被清除。

(2).shared SQL area中涉及到的物件被DDL語句修改,則資料庫將這些內容置為無效,當再次用到這些內容時,最佳化器會重新解析。

(3).如果全域性資料庫名(global database name)被改變,資料庫會將共享池內的資訊全部清除。

   4.可以透過手工執行alter system flush shared pool語句來清空共享池內的內容,以達到重新啟動例項的效果。

四、資料字典緩衝區

   1.資料字典是一組表和檢視的集合,這些表和檢視包括了資料庫的結構資訊、使用者資訊等,oracle在解析SQL語句的時候會頻繁的訪問資料字典表。

   2.資料字典存放於資料字典緩衝區(dictionary buffer cache)和庫緩衝區(library cache)中。

   3.資料字典緩衝區也稱為記錄行緩衝區(row cache),其緩衝資料記錄,而非整塊資料塊。

五、伺服器結果集緩衝區

   1.伺服器結果集緩衝緩衝的是查詢結果記錄的集合,而不是資料塊的集合。

   2.伺服器結果集緩衝包括SQL查詢結果集緩衝和PL/SQL函式結果集緩衝,但二者使用相同的架構。

   3.客戶端也可以快取結果集,但是客戶端快取結果集是在應用層面且佔用的是客戶端的記憶體。

   4.SQL查詢結果集快取:

(1)主要避免多次重複執行相同語句進行重複讀取資料塊和重計算結果集的消耗;

(2)可以透過result_cache提示來啟用該功能;

(3)透過result_cache_mode初始化引數來決定快取所有查詢結果集還是指定查詢結果集。

   5.PL/SQL函式結果集快取:

主要節省重複查詢某函式造成的計算資源。

六、預留池(reserved pool

預留池是oracle共享池內可以分配一塊連續的大的記憶體空間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30167136/viewspace-1562302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章