官术网_书友最值得收藏!

1.1 實例的體系結構

當用戶訪問數據庫時,需要在操作系統中運行相關的應用程序,如SQL*Plus,啟動用戶進程。用戶進程通過實例訪問數據庫。實例和數據庫組成了數據庫服務器,一個數據庫服務器中至少有一個實例。在單機環境中,實例和數據庫是一一對應的,一個實例只能和一個數據庫建立關聯關系,一個數據庫也只能被一個實例加載。在RAC環境中,一個數據庫可以對應多個實例,用戶進程可以通過任何一個實例訪問數據庫。

在本節將主要介紹“實例的概念”及“實例的構成”。

1.1.1 實例的概念

實例(Instance)是一組內存結構和后臺進程的集合。當用戶訪問數據庫時,在數據庫服務器端首先要啟動一個實例,在內存中分配一定的存儲空間,并啟動一些后臺進程。內存空間的作用是存儲與用戶訪問有關的重要數據,后臺進程的功能是監視系統的運行狀態,并負責在實例和數據庫之間交換數據。在支持線程的操作系統中,這些后臺進程以線程的方式運行。

用戶訪問數據庫的操作是通過實例來完成的。實例通過后臺進程與數據庫中的文件進行交互,將用戶修改過的或新增加的數據寫入文件,而用戶對數據的所有訪問都是在實例的內存結構中進行的。引入實例的好處是顯而易見的:數據位于內存中,用戶讀/寫內存的速度要比直接讀/寫磁盤快得多,而且內存中的數據可以在多個用戶之間共享,從而提高了數據訪問的并發性。

Oracle適用于大型的應用系統,如果有成千上萬個用戶同時訪問數據庫時,采用并發能力不強的數據庫是件不可思議的事情。由此可見,Oracle的實例對于數據庫的性能是多么的重要。

1.1.2 實例的構成

當數據庫服務器啟動時,首先啟動實例,然后加載并打開數據庫。當用戶訪問數據庫時,數據庫服務器便為用戶進程啟動一個服務器進程,負責處理用戶進程的所有請求,例如,將用戶訪問的數據從數據文件讀到內存中。

在計算機的內存中不僅要存儲數據庫中的數據,還要存儲數據字典的信息、重做日志以及經過解析的SQL代碼等。實例中的這部分內存結構叫作系統全局區(System Global Area,SGA)。

SGA是實例中最重要的組成部分,一個實例只有一個SGA。SGA中的數據可以在多個用戶進程之間共享。SGA由若干個緩存和緩沖池組成,不同類型的數據存儲在不同的緩存和緩沖池中。SGA的大小可以定制,通過在參數文件中為各個緩存和緩沖池分別指定大小,可以確定SGA的大小。

用戶對數據的操作實際上是在SGA中進行的,當啟動數據庫服務器時,首先啟動實例,然后數據庫被打開。當用戶進程向服務器進程發出請求時,服務器進程將用戶請求的數據讀到SGA中,用戶對數據的所有訪問直接在SGA中完成,其他用戶進程也可以在SGA中訪問相同的數據。當關閉實例時,未保存的數據寫入數據文件中,SGA被撤銷,所有的數據從SGA中清除。

當用戶訪問數據庫時,實例為用戶進程啟動一個服務器進程,并分配一段內存區,用來保存用戶進程的私有信息和控制信息,這段內存區叫作程序全局區(Program Global Area,PGA)。

SGA是所有用戶進程共享的,只要實例被啟動,無論是否有用戶訪問數據庫,SGA都存在。而PGA是用戶進程私有的,當用戶進程向數據庫服務器發出請求時,實例為用戶進程分配PGA,當用戶進程結束時,PGA自動釋放。

由此可見,實例中的內存結構包括SGA和PGA兩部分。SGA是所有用戶共享的,它在實例的運行過程中一直存在。嚴格地說,PGA并不屬于實例,它是服務器進程的一部分,是用戶進程私有的,是一種臨時的內存結構。Oracle允許成千上萬個用戶同時訪問數據庫,并提供了一種巧妙的機制來確保用戶對數據的安全、高效訪問。在Oracle實例中包含一組后臺進程,它們負責完成復雜的數據訪問和維護工作。在Oracle實例中可以啟動以下后臺進程:SMON(系統監視進程)、DBWR(數據庫寫進程)、PMON(監控和管理進程)、CKPT(檢查點進程)、LGWR(日志寫進程)、ARCH(歸檔日志進程)、RECO(恢復進程)。其中有些進程是必須啟動的,而另外一些是可選的。在默認情況下,實例將啟動SMON(系統監視進程)、DBWR(數據庫寫進程)、PMON(監控和管理進程)、CKPT(檢查點進程)、LGWR(日志寫進程)和ARCH(歸檔日志進程)6個后臺進程(參照圖1-1)。

實例的組成如圖1-2所示。在接下來的幾節中,本書將分別對實例的內存結構和后臺進程進行詳細的介紹。

圖1-2

主站蜘蛛池模板: 莫力| 沂源县| 浦东新区| 齐河县| 治多县| 金坛市| 新干县| 绥江县| 林周县| 巴塘县| 景宁| 武清区| 钟祥市| 玉溪市| 曲松县| 林芝县| 宝坻区| 西藏| 奉贤区| 开化县| 滁州市| 阳新县| 汝州市| 都昌县| 镇江市| 航空| 神池县| 闵行区| 沿河| 边坝县| 正蓝旗| 略阳县| 沙洋县| 贵南县| 石阡县| 白山市| 沙田区| 化州市| 唐山市| 金华市| 马关县|