oracle 記憶體結構

winston_DBA發表於2015-04-09

1.基礎結構

   oracle記憶體結構主要包括四部分:SGA(系統全域性區)PGA(程式全域性區)UGA(使用者全域性區)和軟體程式碼區域。

   其中,

SGA:主要存放oracle的共享資料和控制資訊。該區域被所有的伺服器程式和後臺程式共享。

PGA:存放某一個oracle程式的資料和控制資訊,這些程式可以是伺服器程式,也可以是後臺程式。

UGA:存放與使用者會話資訊有關的內容,例如使用者登入資訊等。UGA由兩部分組成:session variable OLAP POOL

   在共享伺服器模式下,UGASGA中存在,而在專用伺服器模式下,UGAPGA中存在。原因是UGA存放著使用者會話的資訊,該區域需要在會話的整個生命週期內都是可用的。共享伺服器模式下,UGA需要記錄多個使用者的資訊,而PGA是每個程式專有區域,無法實現記錄多使用者會話資訊功能,而SGA是所有程式共享的,所以共享模式下,UGA存在於SGA中。

   軟體程式碼區域:主要存放oracle軟體執行所需要的程式碼,該記憶體區域和其他記憶體區域分開,單獨存在。

 

2.記憶體管理方式

   主要包括:自動記憶體管理、自動共享記憶體管理和手工記憶體管理

   其中,

自動記憶體管理:指定例項將用到的記憶體總大小,例項將會自動在SGAPGA之間進行分配。

自動共享記憶體管理:該管理方式為部分自動化,即設定SGA大小,並可選的設定PGA大小。讓SGA記憶體自動管理的同時單獨對PGA進行管理。

手工記憶體管理:透過初始化引數,手工管理SGAPGA

 

3.PGA

   PGA理解:打個比喻,PGA就像是文件管理員的臨時工作空間。而文件管理員就代表著替客戶端程式(client process)幹活的伺服器程式(server process)。伺服器程式建立後,在PGA中分配一塊記憶體,用於存放使用者請求的具體資訊,並將使用者請求的結果進行排序,結果返回後,釋放工作空間。

   PGA的內容:SQL WORK AREA(排序區、HASH區、點陣圖合併區)、session memoryprivate SQL areapersistent arearuntime area

   其中,

private SQL area:存放已經解析的SQL語句和會話相關的資訊。當一個伺服器程式執行SQL或者PL/SQL程式碼的時候,伺服器程式使用private SQL area來儲存繫結變數的值(persistent area,只有當遊標關閉,才釋放該區域),查詢執行的狀態資訊和查詢執行工作區域(runtime areaDML中,語句結束,則該區域釋放)。

SQL work area:該區域主要存放記憶體密集型的操作,比如排序,hash連線,點陣圖連線等。

當啟用PGA自動記憶體管理時,資料庫會自動調整SQL work area的大小。

   共享伺服器模式和專用伺服器模式下的PGA記憶體分配:

Memory area

Dedicated server

Shared server

Nature of session

Private

Shared

Location of the persistent area

PGA

SGA

Location of the run-time area for DML/DDL statements

PGA

PGA

 

4.SGA

   SGA是隨著資料庫例項後臺程式啟動而啟動的。當然,伺服器程式也可以訪問SGA,其只是在資料庫操作時,可以往裡面寫內容。

   每個例項都有自己的SGARAC環境具有多個例項,多個SGA)。

   SGA的主要元件:database buffer cache/ redo log buffer/ shared pool/ large pool/ java pool/ stream pool/ fixed SGA

5.軟體程式碼區域

   軟體程式碼區域是儲存正在執行或準備執行的程式碼的一塊記憶體區域,這塊區域比較特殊,被oracle區別於使用者程式單獨存放並儲存起來。

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

相關文章