2014年12月2日 星期二

資料庫緩衝快取區(DB Buffer Cache)

     Oracle有一個很重要的觀念,就是不到絕對必要,不會等待磁碟I/O,因為磁碟I/O是電腦系統運作中最慢的一個部份,因此,所執行的I/O是越少越好,在Oracle的資料庫架構設計裡面這種觀念是無所不在,資料庫緩衝快取區(Database Buffer Cache)即是因應此概念而規劃出來,其基礎觀念如下:
  • 資料庫緩衝快取區主要的功能是用來暫時存放最近讀取自資料庫裡面的資料,也就是資料檔(Datafile)內的資料,而資料檔是以資料區塊(Block)為單位,因此資料庫緩衝快取區裡面的大小是以Block為基數。當使用者透過應用程式第一次向Oracle資料庫送出查詢需求時,Oracle會先在資料庫緩衝快取區內尋找該資料,如果有需要的資料,就直接從資料庫緩衝快取區回傳給使用者稱為快取命中(cache hit),這麼一來,即可減少硬碟上的I/O次數,如果Oracle發現使用者要的資料並不在資料庫緩衝快取區裡面稱為快取失誤(cache miss),Oracle會從資料庫中讀取所需要的資料blocks,先放入資料庫緩衝快取區裡面,再傳送給使用者。

2014年12月1日 星期一

共享記憶體(System Global Area;SGA)

之所以稱為共享記憶體(System Global Area;SGA),是因為它可以被Oracle所在的作業系統上所有的使用者連線和程序來共用其中的資料,SGA幾個基本的特性依序如下:
  • SGA是由系統的記憶體所構成的裡面儲存了資料、使用者資訊和控制資訊。
  • 一個SGA只能服務於一個Instance,也就是說,當一台伺服器上有多個Instance運作時,每個Instance都有一個自己專屬的SGA,雖然同一台伺服器上SGA都是來自於作業系統上的記憶體,但Instance之間不能相互交流對方的SGA。
  • SGA是共用的,當有多個使用者連線到了這個Instance,SGA中的資訊可以同時被所有使用者同時使用,當然這牽涉了鎖定等等問題。
  • Oracle Process和一個SGA就可以構成了一個Oracle Instance。當Instance啟動時,Oracle會自動從作業系統中分配設定好的記憶體給SGA,而當Instance關閉時,作業系統會回收這些記憶體。下面就是當Instance啟動後,顯示已經分配了SGA的架構。

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 背景處理程序

Oracle 背景處理程式(Background Process)

主要是Oracle記憶體結構與實體結構之間的溝通橋樑。而當Instance被開啟時,會有5個基本的背景處理程序會永遠在上面,當有需要時要用時就拿來用,就像UNIX上的daemand、NT上的”service”,背景處理程序不會因為使用者等入時而增加,或是因為使用者登出而減少。背景處理程序可分為以下兩大類:

深入解析Oracle Instance

所謂的Oracle記憶體結構指的就是Oracle Instance與其他處理程式所共同組成。什麼是Oracle Instance簡單來說Oracle InstanceOracle在作業系統所屬的記憶體裡面建構出來一塊專屬於Oracle資料庫的記憶體空間,這一塊記憶體空間是用來聯繫Oracle實體結構,並提供一個資料交換平臺給使用者使用,然而如果單單Instance成立並不代表使用者或應用程式就使用者就可以順利的使用Oracle資料庫,還必須加上其他的程式(Other Process)如程式整體區域(Program Global AreaPGA)、使用者整體區域(User Global AreaUGA)、User ProcessServer Process等架構起來才能讓使用者連線到Oracle順利的進行作業。

Oracle資料庫結構概述

Oracle基本的架構是由兩塊結構組合而成的:記憶體結構(Instance)和實體結構(Database)。記憶體結構(Instance)指的是在電腦上的一塊記憶體空間,提供使用者做實體結構上的資料存取或資料交換的地方,由於這塊空間是放在記憶體裡面,因此會隨著資料庫的開啟而建構起來,當資料庫關閉時,記憶體結構也就隨之而消失,而實體結構(Database)這名詞在Oracle裡面指的是,資料實際存放的地方,不論資料庫是開啟還是關閉的狀態,永遠都會存在作業系統上。簡單的來說記憶體結構(Instance)是暫時的,而實體結構(Database)則是永久存在的,實體結構(Database)和記憶體結構(Instance)的定義如下。如圖1-1所示。
記憶體結構(Instance):記憶體結構包含由一些記憶體空間及與處理程式(Process)所組合而成的,會隨著資料庫的開啟與關閉而消失。
實體結構(Database):實體結構包含存在儲存媒體上的一些檔案,不會因為資料庫開啟關閉而消失。