1 / 72

Oracle 系統架構基本概念

Oracle 系統架構基本概念.  Outline. Oracle 系統架構概觀 Overview Oracle Instance Oracle Database Other Processes 漫談 Oracle Instance 記憶體結構 Background Processes 漫談 Oracle Database Structures Physical Database Structures Logical Database Structures. Oracle 系統架構概觀

harley
Download Presentation

Oracle 系統架構基本概念

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oracle 系統架構基本概念

  2.  Outline • Oracle 系統架構概觀 • Overview • Oracle Instance • Oracle Database • Other Processes • 漫談Oracle Instance • 記憶體結構 • Background Processes • 漫談Oracle Database Structures • Physical Database Structures • Logical Database Structures

  3. Oracle 系統架構概觀 關於Oracle系統架構,是非常重要的基礎觀念,正所謂「君子務本,本立而 道生」,有了踏實的基礎觀念之後,才能在往後學習Oracle的路上,無往不利

  4.  Overview • Oracle Server主要是由Oracle Instance與Database所組成,透過Server Process與User Process之間的交互運作,藉以達成使用者交付執行的工作。 Query 電腦系統 Oracle Server User Processes Oracle Instance Server Processes Database PGA

  5. 例如,使用者可能想要在Oracle Server上查詢一筆人事資料,使用者將相關的SQL敘述輸入系統中,此時系統會產生相對應的User Process與Server Process,由Server Process負責向Oracle Server溝通,並將符合使用者所需的資料,從Oracle Server送至User Process,以完成該使用者下達的request。

  6. Oracle Instance (Oracle資料庫引擎) • Oracle資料庫中的任何動作都和它有關,是Oracle DB的心臟地帶。 • Oracle Instance主要包含: • background process (背景處理程序) • 是一群常駐的服務常式 (service routine),執行I/O Process 與非Oracle Process 的監控管理,針對目前的使用者所提出的request執行一些一般性的工作。 • 每一個Process專責於一至兩項的工作 • System Global Area (SGA; 系統全域區) • 用來存放資料庫系統相關資訊的一塊共享記憶體資料區域,讓background process得以利用這些系統資訊,以提供適當的服務,處理外部的user request 。

  7. 由於Oracle Instance掌控著處理Oracle Database所有運作的相關資訊。因此,當要存取或操作Oracle Database裏的資料時,必須先啟動Oracle Instance,才能對Oracle Database的內容加以處理 。 • 當Oracle Instance啟動時,電腦系統會先配置一塊記憶體空間給SGA (System Global Area),並且載入相關的background process。

  8. Oracle Database • Oracle Database可分為兩個部份來說明: • 實體結構 • 邏輯結構

  9. 實體結構 • Oracle Database的實體結構部份是由一個個的檔案所組合,主要的檔案包括 • Data files (資料檔) • Redo Log files (重置日誌檔) - online • Control files (控制檔) • 另外尚有: • Password file (密碼檔) • Parameter file (起始參數檔) • Archived Redo Log files (重置日誌封存檔) - offline

  10. Data files Control files Redo log files Parameter file Archived log files Password file Database

  11. 邏輯結構 • Oracle Database的邏輯結構部份,主要有 • Tablespace (表格空間) • Segment (區段) • Extent (延伸區塊) • Block (區塊)

  12. Other Processes • 不屬於Oracle Instance內的Process皆稱為Other Process。是User和應用程式要連接Oracle DB Server的重要橋樑。 • 如User Process、Server Process等 • 主要是反應使用者下達的request (即SQL敘述),將其轉化為Oracle Server能看得懂的相關指令,從Oracle Database裏抓取資料,以反映使用者需求的資料。 • 在Server Process中還有一個相當重要的資料結構-PGA(Program Global Area): • PGA是一個memory buffer,存放相關Server Process的資料與控制資訊。 • 當Server Process被呼叫啟動後,Oracle Server會為其建立一個所屬的PGA,使用者下達的SQL敘述,就是存放在這裏的。

  13. 漫談Oracle Instance

  14. 第一部份我們曾談到所謂的Oracle Instance可分為: • SGA(System Global Area) • Background  Processes 兩部份,並做了概略的說明。現在就分別針對SGA與Background Processes做更完整深入的說明。

  15.  記憶體結構 • SGA是Oracle Server在系統上所建立的一塊記憶體區塊,Oracle Server利用這塊記憶體結構,協同Oracle 的各種Processes來完成使用者所交付的工作。 • SGA主要是由幾種不同的資料區塊所組成- • Database Buffer Cache • Redo Log Buffer • Shared Pool • Large Pool • Java Pool • 其它 (如:Cursors…等) SGA Database Buffer Cache Redo Log Buffer Shared Pool Large Pool Java Pool Others

  16. Database Buffer Cache (資料庫緩衝快取區) • 資料庫系統擷取資料時的一個快取空間,其用途在於有效減少存取資料時造成的磁碟讀寫動作。(到硬碟從事I/O是很耗時的工作!!) • 我們可以透過設定DB_BLOCK_BUFFERS這個參數值來設定Database Buffer Cache的大小。 • 在Oracle的Database Buffer Cache中,尚有一些sub-caches: • DB_CACHE_SIZE • DB_KEEP_CACHE_SIZE • DB_RECYCLE_CACHE_SIZE • 我們可以透過DB_CACHE_ADVICE這個參數,藉由statistics的方式來對不同的cache size做預設。 • 指令:Alter system set db_cache_advice = on

  17. Oracle用所謂的LRU (Least Recently Used) 演算法來管理這塊記憶體空間。 • LRU:當這塊記憶體空間滿載時,Oracle Server將只保留最近有被使用過的資料,最不常用的資料則寫回磁碟中,並將該資料所佔用的記憶體空間釋放出來。 • 由於Database Buffer Cache關係著Oracle Server的I/O動作頻繁與否,因此如何管理及設定Database Buffer Cache的大小,對於Oracle Server的效能調校,是相當重要的一項課題。

  18. Redo Log Buffer (重置日誌緩衝區) • 當資料庫的內容有所異動時,Redo Log Buffer會記錄其相關異動的情形: • 做了什麼改變 • 改變後的舊資料與新資料 • 經過一定的時間週期或者是Redo Log Buffer滿載時,Oracle Server會將Redo Log Buffer的內容寫到Redo Log File裏,以追蹤整個資料庫的使用情形。 • 當Oracle Server不幸當掉的話,就能利用這些記錄下來的資訊,進行資料庫的復原 (Recovery)。 • 有關Redo Log Buffer的大小設定,可以透過設定參數LOG_BUFFER,改變Redo Log Buffer的大小。

  19. Shared Pool (共享區) • 當使用者將SQL、PL/SQL等操作指令送至Oracle資料庫後,系統會先解析 (Parse)語法是否正確。解析時,下列兩項資料將會放入Shared Pool中: • 解析時所需要用到的相關資訊 • 解析後的結果 • 當有不同的使用者執行相同的SQL指令,就可以共用Shared Pool中解析好的結果,以加速SQL指令執行的速度。 • Shared Pool內包含數種不同的區域,主要有下列兩類: • Data Dictionary Cache – 存放解析時所需要的相關資訊,以供查詢之用 • Library Cache – 存放各類指令解析後的結果,以供重覆使用 • Shared Pool亦是採LRU的記憶體管理演算法。 • Shared Pool的大小設定,是由SHARED_POOL_SIZE這個參數來控制

  20. Large Pool (大型區) • Large Pool是Oracle針對一些需要大量記憶體空間的資料庫處理與運算工作所提供的一個額外選項,它可以讓SGA配置一個較大的記憶體空間,提供給處理Oracle的backup/restore、I/O、執行Oracle復原管理程式RMAN、… 等。 • 透過指定LARGE_POOL_SIZE這個參數,設定Large Pool的大小。

  21. Java Pool (Java區) • 當使用者有使用Java時,Oracle Server利用這塊記憶體空間,存放及Parse所使用的Java Code,藉以提供Oracle與Internet更高的整合性。 • 透過指定JAVA_POOL_SIZE這個參數,來改變Java Pool的大小 。

  22.  Background Processes • Oracle Server 所提供的Processes可分為兩類: • Server Processes • 用以服務Client Processes,根據Client Processes的需求,由Oracle Server動態配置所產生的,用以服務Client Processes的需求 • 不被包含在Oracle Instance裏 • 在Server Processes裏,尚包含另一個重要的記憶體結構-PGA (Program Global Area),存放著Client Processes與Server Processes間的重要資訊 • Background Processes • 用來管理Oracle Server所需的一些系統常式,諸如資料庫的I/O、Oracle Processes的管理等 • 包含於Oracle Instance中

  23. 主要的Background Processes共有五個,只要有這五個Background Processes,Oracle Server就可以正常地運作了,分別是: • Database Writer (DBWR) • Log Writer (LGWR) • System Monitor (SMON) • Process Monitor (PMON) • Checkpoint Process (CKPT) • 其它尚有Archiver (ARCH)、Recoverer (RECO)、Dispatcher (Dnnn)、Lock (LCKn)、Job Queue (SNPn)及Queue Monitor (QMNn) 等Background Processes,它們主要是提供Oracle Server更進階的管理。 • 如ARCH,它可以提供比LGWR更強的資料庫回復能力。

  24. Database Writer (DBWR) • DBWR 主要是負責管理Database Buffer Cache,將Database Buffer Cache中修改過的資料,整批寫入Data File裏,透過系統整批寫入的方式,可以提高整個系統的執行效率。 • 當使用者執行 DML 指令修改相關資料欄位,並執行commit指令時,Oracle本身並不是直接將修改過的資料直接寫入Data File裏,而是當Database Buffer Cache的內容即將滿載或是經過一定的時間區隔 (檢查點 Checkpoint; CKPT),才將資料寫入Data File中。 • 藉由減少相關的I/O動作,以提高系統執行效能。 • 使用write-ahead的技術

  25. Instance SGA Database buffercache DBWn Data files Control files Redo log files Database

  26. 由於在大型線上交易 (OLTP)系統,其資料庫異動情況可能十分頻繁。因此: • 一個Oracle Server可以有一個以上的DBWR Background Processes,可以依實際系統硬體與作業系統的特性,設定DB_WRITER_PROCESSES參數值,以獲得整個資料庫系統的最佳執行效能。 • 當設定DB_WRITER_PROCESSES的內容值後,系統上有關DBWR的名稱將會變為DBWn,n可為 0~9,如DBW0、DBW1、DBW2等。(系統預設只會啟動一個DBWn,即DBW0)。 • 然而,在單一處理器的伺服器系統,配置額外的DBWn並無太多的實質幫助。

  27. Log Writer (LGWR) • LGWR主要是負責將Redo Log Buffer 的內容值,寫入online的Redo Log File中。 • 它與DBWR的運作方式不同點在於: • DBWR在Database Buffer Cache即將滿載或是經過一定的時間區隔,才會將資料寫入Data File中,且是在有需要的時候才會對相關檔案做存取的動作 • LGWR是在資料庫的內容有異動且已被確認 (commit) 時,如insert、update、delete等,就會被觸發,將異動的情形記錄到online Redo Log File中。因此,當資料庫crash時,就可以根據online Redo Log File內容,對資料庫進行還原的動作。 • LGWR一樣可以透過設定LGWR_IO_SLAVES這個參數值,提供非同步I/O模式的功能。

  28. LGWR 之動作時機: • 當使用者確認 (commit)某交易時,LGWR會遵循Write-ahead Protocol (先期寫入協定),將Redo log butter內的資料異動記錄寫入。 • 下列幾種情況: • 自動週期性地動作,如:間隔時間為3秒 (Checkpoint; CKPT) • 重置日誌緩衝區之剩餘空間不到2/3 • 當DBWn回寫資料檔時,必要的時候LGWR也會動作 (Write-ahead Protocol)

  29. Instance SGA Redo log buffer LGWR DBWn Data files Control files Redo log files Database

  30. 何謂 Write-ahead? • 在DBWn回寫資料至Data File之前,Redo Log Buffer內相關資料都必須完成寫入動作 (即寫入Redo Log File)。 • 若DBWn發現某些重置紀錄尚未寫入Redo Log File時,它會通知LGWR 前來處理。 • 等到LGWR將Redo Log Buffer的紀錄寫入完畢時,DBWn才會開始寫入資料檔。

  31. 為何要把Redo Log File稱為 online Redo Log File? • 因為Oracle把Redo Log File分為兩部份: • online Redo Log File • archive Redo Log File • 這兩個都是負責記錄、追蹤整個資料庫的異動情形。 • 不同的是,archive Redo Log File是online Redo Log File的備份資料檔,由另一個Background Process- Archiver (ARCH)負責管理。 • 在預設的情況下,ARCH是不會啟動的,而是由LGWR記錄資料庫的異動情形,將這些記錄資料寫到online Redo Log File裏。 • 如果Oracle Server不幸掛了,此時的資料庫僅能復原online Redo Log File裏有記錄的資料。可是,其他的呢?這時候就要靠ARCH將online Redo Log File備份出來。

  32. System Monitor (SMON) • 如果是因為停電或是其它因素導致Oracle資料庫不正常被關閉, 下一次啟動資料庫時將由SMON進行必要的資料庫修復動作。 • 主要的工作有: • 執行一些資料庫必要的修復工作(如果有需要的話,SMON會使用online Redo Log File的內容)。 • 定時清除資料庫系統中一些不必要的殘餘物件,例如上次系統交易進行一半的資料或暫時性區間。 • 執行整個系統儲存空間的管理,對於Tablespace上破碎的Extent,它會將這些較小的Extents予以合併,整理出一個較大的空間,以供系統日後的使用。

  33. Instance Instance SGA SGA SMON SMON Data files Control files Redo log files Database

  34. Process Monitor (PMON) • 當某個User Process異常中止時,PMON會執行程序修復 (Process Recovery)的動作,就是 • 把已經失效的User Processes給趕出記憶體,並釋放該記憶體空間,留待系統日後使用 • 釋放該Process之前使用的系統資源,避免Deadlock發生。 • PMON和SMON一樣,都是由Oracle資料庫系統週期性自動執行,檢查整個資料庫系統的運作情形。

  35. Instance SGA PMON PGA area

  36. Checkpoint (CKPT) • 在一個指定的時間區間裏,DBWR會對所有在Database Buffer Cache所做的異動,將其結果寫入到相關的Data Files以及Redo Log Files、Control Files,這樣的動作,就稱為產生 (設定) 一個checkpoint事件。 • CKPT Background Process就是扮演著一個通知者的角色,經過一定的時間後,負責通知 DBWR 執行Checkpoint的動作。 • CKPT會在適常時候產生一個Checkpoint事件,其意義為: • 確保Database Buffer Cache內經常被異動的資料也能夠定期被寫入硬碟的Data File。(∵LRU演算法) • 萬一Oracle需要進行Instance Recovery時,就不需要Checkpoint之前的Redo record,可縮短資料庫動新啟動的時間。

  37. Instance SGA Redo Log Buffer LGWR DWW0 Instance SGA DBWn LGWR CKPT Data files Control files Redo log files

  38. 執行Checkpoint的時間區間,可以透過設定LOG_CHECKPOINT_INTERVAL這個參數,改變checkpoint的區間。執行Checkpoint的時間區間,可以透過設定LOG_CHECKPOINT_INTERVAL這個參數,改變checkpoint的區間。 • 然而,在設定LOG_CHECKPOINT_INTERVAL時,要注意的是: • 這個值設得太小的話,會造成系統額外I/O的負擔 • 設得太大,超過online Redo Log File swap的時間時,LOG_CHECKPOINT_INTERVAL的值又會變得沒有意義 • 因為Oracle會在swap online Redo Log File時,做一次checkpoint的動作。

  39.  Summary • 縱觀以上的說明,現在我們可以勾勒出整個Oracle Instance的整個架構圖: • 系統記憶體大致上的配置情形有Database Buffer Cache、Redo Log Buffer、Shared Pool、Large Pool、Java Pool…等。 • 在Background Processes部份,計有DBWR、LGWR、SMON、PMON、CKPT…等。 Instance SGA Shared pool Memory structures Library cache Database buffer cache Redo logbuffer Data Dictionarycache Background structures PMON SMON DBWR LGWR CKPT Others

  40. Instance Userprocess SGA Shared pool Library cache Redo logbuffer cache Databasebuffer cache Serverprocess Data Dict.cache PGA PMON SMON DBWR LGWR CKPT Others Data files Control files Redo log files Parameter file Archived log files Password file Database

  41. 漫談 Oracle Database Structures

  42. 第一部份曾談到所謂的Oracle Database可分為: • 邏輯結構 • 實體結構 兩部份,並做了概略的說明。 • 如果您有心成為一個頂尖的Oracle DBA ,那麼不僅要對以上兩結構內的各個項目如數家珍般熟悉,還要瞭解其內部運作與相互關係才行。現在就分別針對這兩部份做深入的說明。

  43.  邏輯結構 (Logical Database Structures ) • 邏輯資料庫結構是Oracle所提供的一種抽象化的資料庫管理概念,透過一個「Mapping」的機制,管理Oracle Physical Database Structures。 • 由外至內,我們可以看到: • 整個Database是由一個以上的Tablespace (表空間) 組成; • 每個Tablespace存在著許多的Segment (區段); • 每個Segment內含許多的Extent (延伸區塊); • 最後,則是構成整個Oracle Database的最小邏輯單位-block (區塊)。

  44. Tablespace (表空間) • Oracle 資料庫允許DBA 自行規劃各種用途的資料表空間(Tablespace),以便存放不同型態的資料與資料庫物件。例如: • 存放Oracle系統資訊的「資料辭典」(data dictionary)可放在 SYSTEM 表空間; • 使用者所存放的相關資料可存放在 USER 表空間; • 所有資料表的索引(Index)則可單獨存放在INDX 表空間。 • SYSTEM為Oracle資料庫預設的表空間;USER 與INDX 則是由DBA 自行規劃建置的。

  45. 一般來說,Oracle資料庫至少應規劃出五個以上的資料表空間,如下圖所示:一般來說,Oracle資料庫至少應規劃出五個以上的資料表空間,如下圖所示:

  46. Oracle Server其他相關的邏輯結構,均是經由Tablespace做統一集中的管理。 • Tablespace依其可存取的狀態,分為兩種狀態: • on-line (在線) • off-line (離線) • 再以其可存取的模式區分,可分為兩種式 • read-only (唯讀) • read-write (讀寫) • 透過其存取狀態的控制以及存取模式的切換,將可使整個資料庫的管理更為方便。

  47. Tablespace的特性 • Oracle Database是由數個Tablespace所構成。 • 一個Tablespace在同一時間點上,僅能類歸於一個Database。即,Database與Tablespace之間的關係,是呈現一對多的關係。 • 除了SYSTEM Tablespace與存在作用中 (active) 的Rollback Segment的Tablespace外,其餘的Tablespace均可在Database尚在執行的時候,將其選擇性的off-line或on-line,以利資料庫的管理。 • Tablespace能夠隨意切換其存取模式-read-only及read-write模式。

  48. Block (區塊) • Oracle Database邏輯空間概念中最小的邏輯空間單位,有關Oracle Server對儲存空間所執行的配置(allocate)、讀取 (read) 及寫入 (write),均是以此為單位,進行資料庫的種種操作。且在新建Oracle 資料庫時就必須明確地定義。 • Oracle的區塊大小通常是數倍於 “作業系統的磁碟讀寫區塊”(O.S. blocks) 表示, Oracle在存取資料時是以自身的 block為最小讀取單位,而不是以O.S. block 為單位。 • 它的參數設定透過參數DB_BLOCK_SIZE設定之。必須將 DB_BLOCK_SIZE 設定為 O.S.blocks的整數倍。

  49. Extent (延伸區塊) • 雖然資料區塊是Oracle最小的資料讀寫單位,但值得注意的是:Oracle在 “配置” 儲存空間時,並不是以資料區塊為單位,而是改採「延伸區塊」的方式來配置空間。 • 它是由許多連續的 blocks所組成。 • 一個Extent的相關資訊,僅能存在於同一個Data file中。

More Related