標籤:負載 獲得 程式 tin rac ffline 指示燈 smon vpd
1,Oracle的體繫結構、進程管理與結構組件詳細介紹
User process:串連到資料庫伺服器的進程,使用者通過它跟資料庫進行互動。但是User process不能直接和資料庫進行互動,它必須和伺服器的組件Server process進行串連。
Server process:伺服器處理序,用來解釋由User process傳遞過來的sql語句,負責commit和rollback,參與IO。啟動Server process的時候會分配一塊記憶體地區,叫做PGA(Process Global Area),分為四個部分:堆棧(指向其他PGA記憶體結構的指標)、session info(儲存會話的資訊)、cursor info(每個會話遊標的資訊)、Sort Area(排序區)。PGA地區是私人地區,不能被其他進程所共用
2,根據示圖,便於我們記憶,示圖分三部分組成,左側User Process、Server Process、PGA可以看做成Clinet端,上面的執行個體(Instance)和下面的資料庫(Database)及參數檔案(parameter file)、密碼檔案(password file)和歸檔記錄檔(archived logfiles)組成Oracle Server,所以整個示圖可以理解成一個C/S架構。 Oracle Server由兩個實體組成:執行個體(instance)與資料庫(database)。這兩個實體是獨立的,不過串連在一起。在資料庫建立過程中,執行個體首先被建立,然後才建立資料庫。在典型的單一實例環境中,執行個體與資料庫的關係是一對一的,一個執行個體串連一個資料庫,執行個體與資料庫也可以是多對一的關係,即不同電腦上的多個執行個體開啟共用磁碟系統上的一個公用資料庫。這種多對一關聯性被稱為實際應用群集(Real Application Clusters,RAC)RAC極大提高了資料庫的效能、容錯與延展性(可能耗費更多的儲存空間)並且是oracle網格(grid)概念的必備部分。
下面我們來詳細看一下oracle資料庫的體系架構
Oracle體系架構主要有兩大部分組成:資料庫執行個體(Instance)和資料庫檔案(database)
資料庫執行個體
指資料庫伺服器的記憶體及相關處理常式,它是Oracle的心臟。與Oracle效能關係最大的是SGA(System Global Area,即系統全域區活共用記憶體區),SGA包含三個部分:
1、資料緩衝區,可避免重複讀取常用的資料;
2、日誌緩衝區,提升了資料增刪改的速度,減少磁碟的讀寫而加快速度;
3、共用池,使相同的SQL語句不再編譯,提升了SQL的執行速度。
oracle資料庫執行個體的另一部分就是一些後台進程了,他主要包括:
1.系統監控進程(SMON)
2.進程監控(PMON)
3.資料庫寫進程(DBWR)
4.日誌寫進程(LGWR)
5.檢驗點進程(CKPT)
6.其他進程(Others)
這些後台進程合起來完成資料庫管理工作
在訪問資料庫的時候。器後台先啟動執行個體。啟動執行個體前要先分配記憶體區。然後在啟動後台進程。資料庫啟動過程中必須啟動上面的前五個進程。否則執行個體無法建立。
注意:在啟動oracle資料庫的時候。因為有些進程是在開機啟動項中自動啟動的。所以佔用了很大一部分記憶體。如果您電腦上還有一些其他佔用記憶體比較大的程式。在啟動oracle資料庫的時候有可能會因記憶體不足而啟動失敗。
Oracle伺服器
Oracle伺服器包括兩部分:資料庫執行個體和資料庫檔案。他們構成了也就是所謂的資料管理系統(DBMS)
物理結構:oracle的物理結構指的其實就是一些存在硬碟上的各種檔案。其最終目的就是儲存和擷取相關資料。這些存在硬碟上的檔案組成了oracle資料庫的物理結構
Oracle中主要包括三種檔案:
1.資料檔案
2.控制檔案
3.重做記錄檔
參數檔案和密碼檔案:
參數檔案:定義了資料庫執行個體的特性,他是本文檔案
密碼檔案:授予使用者啟動和關閉資料庫的執行個體。主要有位元據組成
Oracle資料庫的記憶體結構:SGA和PGA
SGA:資料庫執行個體的一部分。資料庫執行個體的啟動會首先分配系統全域區(SGA)
1.共用池:共用sql和pl/sql代碼,即把解析的sql代碼在這裡緩衝,PL/SQL不僅緩衝還共用。這樣大大提高了直接存取磁碟獲得sql的速度。
1)庫快取:儲存最近使用過的sql語句。利用LRU(最近最少使用)演算法來管理緩衝。最近最少使用演算法是一種比較常用的演算法。在這裡當庫快取接近滿的時候。它會把緩衝中最近最少使用的資料清除緩衝中。加入新的緩衝sql。
查看共用池的大小使用參數shared_pool_size
Sql>show parameter shared_pool_size
設定共用池大小
Sql>alter system set shared_pool_size=16M
註:在下面的的內容中。如果提到有關參數。如沒有特殊說明。設定和查看參數值都是用以上類似方法。以後就不在重複了。並且這些參數必須是在以系統管理員system登陸時才能查看和修改。用類似scott使用者是不能查看和修改的。
Oracle提供了DB_CACHE_SIZE(資料庫大小)和DB_BLOCK_BUFFERS(資料庫塊個數)設定庫快取的大小,即為兩者的成績。
2)資料字典快取
儲存資料檔案、表、索引、列、使用者、許可權資訊和其他一些資料庫物件的定義。把相關的資料字典資訊放入緩衝來提高查詢的回應時間。其大小取決於共用池的大小。
2.資料庫快取
儲存了最近從資料檔案讀入的資料區塊資訊或使用者更改後需要寫回資料庫的資料資訊。記憶體讀取比磁碟讀取的速度快的多。提高了訪問速度。這裡的存取也採用了LRU(最近最少使用)演算法。
Oracle資料庫引入了緩衝區顧問參數(Buffer cache advisory parameter)用於啟動和關閉統計資訊。這些資訊用於預測不同緩衝區的大小導致的不同行為特性。三種狀態:OFF:ON:READY
設定顧問緩衝為開啟狀態後。可以通過動態效能檢視:v$db_cache_advice查看緩衝區的建議資訊
3.重做日誌緩衝
在執行insert、update等操作後。資料發生了改變。這些變化的資料在寫入資料庫快取前會先寫入重做日誌緩衝區。包括變化之前的資料。可以通過初始化參數log_buffer查看它的大小。此參數為靜態參數,不能修改。
4.大池和java池
大型池(Large Pool)
在SGA中大型池是可選的緩衝區。它可以根據需要有管理權進行配置。它可以提供一個大的區以供象資料庫的備份與恢複等操作。
在以下幾種情形下會啟用:
一,backup 和 restore 操作的時候
二,當啟動UGA, I/O slaves的時候
三,設定MTS伺服器的時候,使用者資訊的存放也使用到Large Pool
可以使用以下命令變更Large Pool的大小:
ALTER SYSTEM SET Large_Pool_Size = 64m;
Java池用於編譯java語言編寫的指令。通過java_pool_size查看和修改大小。大小由資料庫在SGA自動分配和管理。所以查看的時候值為0;
Oracle的串連和會話
串連 (connection)與會話 (session)這兩個概念均與使用者進程 (user process)緊密相關,但二者又具有不同的含義。
串連 :使用者進程和 Oracle 執行個體間的通訊通道(communication pathway)。這個通訊通道是通過進程間的通訊機制(interprocess communication mechanisms)(在同一個電腦上運行使用者進程和 Oracle 進程)或網路軟體(network software)(當資料庫應用程式與 Oracle 伺服器運行在不同的電腦上時,就需要通過網路來通訊)建立的。
會話 :使用者通過使用者進程與 Oracle 執行個體建立的串連[此處串連與上文中的串連含義不同 ,主要指使用者和資料庫間的聯絡 ]。例如,當使用者啟動 SQL*Plus 時必須提供有效使用者名稱和密碼,之後 Oracle 為此使用者建立一個會話。從使用者開始串連到使用者中斷連線(或退出資料庫應用程式)期間,會話一直持續。
Oracle 資料庫中的同一個使用者可以同時建立多個會話。例如,使用者名稱/密碼為的SCOTT/TIGER 使用者可以多次串連到同一個 Oracle 執行個體。
當系統沒有運行在共用服務模式下時,Oracle 為每個使用者會話建立一個服務進程(server process)。而當系統運行在共用服務模式下時,多個使用者會話可以共用同一個服務進程。
5,以執行一條SQL語句為例,從發出SQL語句到返回結果集,可以分為三個部分:
5.1,解析:
(1)還原成ASCII碼,產生hash_value
(2)到PGA中匹配hash_value,進行快速軟解析,如果在PGA中沒有找到,就到Library Cache中匹配hash_value,進行軟解析
(3)如果都沒有找到,就轉入硬解析(文法分析:SQL語句是否符合文法要求、語義分析:SQL語句中對象是否存在、安全性稽核:發出SQL的使用者是否有許可權執行操作、由最佳化器進行最佳化、行資源產生)。
5.2.執行:按照執行計畫尋找需要的資料和對象
5.3.擷取:將找到的資料返回給User process
Instance(執行個體):訪問資料庫的手段,包括SGA(System Global Area)、執行個體進程
SGA包括:
Shared Pool(共用池):
Library Cache:緩衝SQL語句的執行計畫
Data Dictionary Cacche:儲存最近訪問過的資料字典的行
Database Buffer Cache(資料庫緩衝區):以8K為單位,緩衝硬碟資料的副本(緩衝IO的瓶頸),使用LRU(最近最少使 用原則)機制進行空間管理。
Large Pool(大池):儲存與SQL、PLSQL不相關的資料,比如做資料備份還原恢複時候所用到的塊。
Java Pool:為java的編譯提供緩衝
Streams Pool:緩衝流複製資料,如果啟用了流複製而又沒有定義Streams Pool,oracle會分配shared pool的10%來作 為Stream Pool。
Log Buffer:儲存redo條目,所有條目的變化,將來參與recover。
後台進程
PMON(Process Monitor)進程監視器:監控其他非主要核心進程,如果異常進行重啟,清理由於User Process異常導致的垃圾資料、在執行個體的動態註冊時,負責向監聽進程註冊執行個體,在叢集環境,每60秒收集一次當前節點的CPU壓力,實現Load Balance基於CPU壓力的負載平衡,
DBWn(Database Writer):把Database Buffer Cache裡面的髒資料同步到物理硬碟中,使資料同步,其中n的取值從0~9,a~z,一共36個,預設是一個。觸發條件包括:CKPT(檢查點)、Database Buffer Cache達到儲存上限(儲存容量的10%)、Database Buffer Cache沒有可用空間進行寫操作、timeout、RAC Ping Request叢集環境中的ping請求,表層級的truncate或者drop操作、tablespace readonly、tablespace offline、begin backup。
SMON(System Monitor)系統監控進程:空間管理(合并空閑臨時段、回收臨時段)、執行個體恢複(涉及前滾後滾、鎖機制)
CKPT(CheckPoint)檢查點:調度資料寫進程,將完成的檢查點寫到資料檔案頭,將完成的檢查點寫到控制檔案。
LGWR(Log Writer)日誌寫進程:將Log Buffer裡面的內容寫到硬碟的聯機日誌二進位檔案中。觸發條件包括:commit、達到日誌緩衝區空間的1/3,timeout、任何一次資料寫之前都要先寫日誌。
RECO(Recover):在分布式系統下,完成分布式環境中的事務的恢複。
CJQ0:作業隊列的調度進程:調度job隊列。
Jnnn:作業從屬進程,為作業服務的進程。
ARCn:歸檔進程。
QMNn:隊列監視器。
MMAN:記憶體管理。
MMON:記憶體監控。
MMNL:記憶體指示燈。
資料庫在硬碟的儲存方式
ControlFile 控制檔案:記錄資料庫的物理資訊、資料庫屬性、資料庫名字、ID號、建立時間、resetlog change number、角色等記錄資料庫物理資訊一致性的檔案,至少一個。
RedLogFile 聯機記錄檔:記錄所有資料區塊的變化(LogBuffer中儲存的條目),至少兩個。
DataFile 資料檔案:一個資料庫可以包括65535個檔案,每個檔案可以管理最多4M個Oracle塊。
PasswordFile 口令檔案:記錄超級使用者的名字和口令,用來做超級使用者的審核。
ParameterFile 參數檔案:記錄所有非預設值的初始化參數,約束執行個體的行為。
TraceFile 追蹤檔案:ASII碼格式的文字檔,記錄資料庫工作時的一些資訊和一些報錯內容,用來做trouble shooting。
ArchivedLogFile 歸檔記錄檔:RedoLogFile的鏡像備份。
oracle資料庫體系架構詳解