2014年12月1日 星期一

Oracle記憶體結構

所謂的 Oracle 記憶體結構指的就是Oracle Instance。那什麼又是Oracle Instance?從字面上可能看不出來是什麼意思,以人體器官來做比喻就是人的大腦而Oracle Instance就等同『Oracle Database的大腦』,就表示說Oracle Database任何處理的動作都跟他有關。
  • Instance 是一個記憶體結構,但這個記憶體結構是靠什麼來架構出來的呢?是由參數檔(Parameter File)架構出來的;而參數檔是硬碟上的一個檔案,所以不會被消滅,但Instance會隨著Instance開啟而被開啟,關閉而消失,所以每一個Instance雖然用的是用同一個參數檔,但在不同的時間點他們都是獨一無二的。
  • Instance是在我們的記憶體裡面,當我們開啟時告訴伺服器及作業系統要消耗多少記憶體,而 Instance主要是由兩項要素組成: 共享記憶體(System Global Area;SGA),及一組背景處理程序(Background Process)所組合而成的。有這兩大元件Instance就算是成立,但Instance成立並不代表使用者或應用程式就可以使用Oracle,還必須加上其他的程序(Other Process)才能讓使用者連線到Oracle進行作業。

Oracle Instance示意圖
Oracle 記憶體結構主要是由以下幾個主要元件所組成,依序如下:
  • 共享記憶體(System Global Area;SGA):主要是做資料交換的暫存記憶體空間。
  • 背景處理程式(Background Process):主要是Oracle記憶體結構與實體結構之間的溝通橋樑。
  • 軟體程式碼區域(Software Code Area):主要是存放Oracle軟體可執行程式的地方,同時軟體程式碼區域也是屬於Oracle Instance的一部份。
  • PGA(Program Global Area;PGA):PGA是一塊私有的記憶體區塊,包含了有server process正在執行的工作資訊。每一個server process都有一個自己的PGA。詳細內容請參閱《第3章:深入解析PGA與UGA》。
  • UGA(User Global Area;UGA):UGA主要是儲存使用者特定的連線狀態,UGA可能在SGA中分配,也可能在PGA中分配,這取決於Oracle的網路連線方式,看是使用多執行緒伺服器模式(Multi-Thread Server)還是專屬伺服器模式(Dedicated Server)。
  • 其他處理程式(Other Process):主要是使用者與Oracle記憶體結構之間的溝通橋樑。
Tip - Oracle Instance的重點如下:
  1. Instance是一個記憶體結構,它是由實體檔案參數檔(Parameter File)架構出來的。
  2. Instance存在於記憶體當中,當Instance被開啟時,會告訴伺服器及作業系統需消耗多少記憶體。
  3. Oracle Database的領域裡有一個很重要的觀念,就是盡量避免不必要的I/O,主要原因是為了確保資料庫的執行效率,因此Instance的記憶體配置與Oracle效能有密不可分的關係。而且關於記憶體的錯誤(如4030、4031錯誤等)都是十分令人頭疼的問題。可以說,Oracle記憶體的配置,是最影響Oracle性能的配置。記憶體還直接影響到其他兩個重要資源的消耗:CPU和IO。
 

1 則留言 :