2013年11月23日 星期六

[Tips]Oracle 11g Architecture 資料庫架構(上) - Oracle Instance

從下圖我們可以發現,其資料庫架構看起來相當複雜呢!

大致可以先簡單分為Oracle InstanceOracle database files,當我們提及Oracle Server的時候,它同時包含了上述兩個東西。以下將分為兩篇針對其進行個別探討:
Oracle的架構裡包含了許多複雜的元件,也是Oracle對於初學者相當不好學習的地方,而理解這些對於了解Oracle運作有相當大的幫助,讓我們一起來看看吧^_^

Oracle Instance(實例)
  • 透過Oracle Instance去存取Oracle database。
  • 一個Oracle Instance只會開啟且只有一個Oracle database。
  • 包含Memory StructuresBackground Processes
連線到Oracle Instance
當使用者利用sqlplus、pl/sql developer等工具,通常稱為User Process發出請求(request)連線到Oracle Instance的時候。此時Oracle會啟動一個Server Process來對應User Process,完成和User的連線,此時Server Process還會去和Oracle Instance建立一個Session。

一、Memory Structure
  • System Global Area (SGA)
    SGA是Oracle Instance不可或缺的元件,當Instance啟動時,會分配一塊Memory空間給它。
  • Program Global Area (PGA)
    當Server Process啟動時,會分配一塊Memory空間給它。
1)System Global Area
SGA包含以下幾個重要元件:
  • Shared Pool
    • 儲存最近被執行的SQL和PL/SQL語句
    • 儲存最近被使用到的資料定義(data definitions)
    • 包括Library Cache、Data Dictionary Cache等
  • Database Buffer Cache
  • Redo Log Buffer
  • Large Pool
  • Java Pool
2)Library Cache
  • 儲存最近被執行的SQL和PL/SQL語句
  • 目的是為了分享(sharing)常用的語句,提高效率。
  • 在清除資料(hose keeping)上採用LRU(least recently used)的演算法,也就是最少被使用的資料會被從Memory中清除。
3)Data Dictionary Cache
  • 儲存最近被使用到的資料定義(data definitions)
  • 儲存的資訊包括檔案、表格、欄位、使用者名稱、角色、權限和其它物件等。
  • 在進行語句解析(parse)的階段,Server Process會來去Data Dictionary找其物件名稱以及是否具備存取該物件權限的驗證。
  • 目的是為了加快進行查詢或執行DML的回應速度(response time)。
4)Database Buffer Cache
  • 儲存從datafiles中的取出資料副本(copy)。
  • 目的在於提升資料的取得和更新效率。
  • 在清除資料(hose keeping)上採用LRU(least recently used)的演算法,也就是最少被使用的資料會被從Memory中清除。
5)Redo Log Buffer
  • 儲存所有對資料進行的改變。
  • 每一筆的資料改變稱之為redo entry或redo record,而多個redo entries組成redo log files。
  • 目的是為了系統或資料的回復(recovery)。
6)Large Pool
  • 是一個可選(optional)的記憶體區域
  • 目的是為了紓解Shared Pool的負擔。
  • 通常使用在:
    • 在Shared Server Mode,作為Session memory(UGA)使用。
    • 作為Server Process的I/O Buffer Cache。
    • 作為備份和回復的空間,使用RMAN也會使用此空間。
    • 作為同步執行(Parallel)的緩衝,當有多個連線需求同時進行,可以利用此空間作為緩衝處理。
    • 供系統來使用,Large Pool不使用LRU。
7)Java Pool
  • 提供Java指令的解析請求

二、Process Structure
依類型可以分為以下三種:
  • User Process
  • Server Process
  • Background Processes
1)User Process
  • 利用程式(sqlplus、pl/sql developer、SQL developer等)對Oracle Server提出連線請求。
  • 不會直接連線到Oracle Server,會由Oracle啟動一個Server Process對應。
2)Server Process
  • 產生一個Session直接連線到Oracle Server
  • 分為Dedicated Server Mode和Shared Server Mode),Dedicated模式裡中每一個Server Process只服務一個User Process;而Shared模式就是每一個Server Process可以服務多個User Process。
3)Background Process
  • 作為維護和執行相關的一切,確保Oracle Server運作正常。
  • 必須有的包括DBWn、LGWR、CKPT、PMON、SMON
4)Database Writer (DBWn)
  • 目的是為了確保資料的一致性。
  • 在以下情況發生時,會執行DBWn
    • 發生CKPT
    • Dirty buffers(根據LRU寫到Dirty list)達到門檻
    • 沒有free的buffers空間
    • Timeout
    • Tablespace設定為Offline或Read only
    • 執行Table DROP或TRUNCATE
    • Tablespace設定為BEGIN BACKUP
5)Log Writer (LGWR)
  • 在以下情況發生時,會執行LGWR
    • 執行commit或DDL
    • 當1/3滿
    • 當一次寫入超過1M的redo entry
    • 每3秒
    • 必須在DBWn前執行
6)Checkpoint (CKPT)
  • 負責處理
    • 發送信號給DBWn,告訴DBWn該執行了
    • 更新datafile headers
    • 更新control files
7)PMON
  • 當processes失敗時,會進行以下幾個動作來清除:
    • 將交易(transaction)進行Rolling back
    • 釋放該process的locks
    • 釋放該process掌握的其它資源
    • 重新啟動掛掉的dispatchers
8)SMON
  • 負責進行Instance recovery
    • 從redo logs中將已經commit的資料進行回復,也就是將之前執行的DDL、DML再重新做一遍。
    • 將尚未進行commit的交易執行Roll back,回到交易尚未變動的狀態。
  • 重新連結破碎的free空間
  • 將暫存的空間(temporary segments)進行回收