標籤:
Oracle伺服器主要由執行個體、資料庫、程式全域區、前台進程
執行個體:用來提供管理資料庫的功能
資料庫:由Oracle資料庫檔案組成,用來儲存系統資料 ;一般有:資料檔案、控制檔案、重做記錄檔
而執行個體可以進一步劃分為:系統全域區(SGA)和 後台進程(PMON,SMON等)
而SGA 是作業系統的記憶體資源,後台進程使用CPU和記憶體資源 程式全域區(PGA)是一個非共用的記憶體地區,用於系統管理使用者進程的私人資源
系統全域區(SGA)
System Global Area 是所有使用者進程共用的一塊記憶體地區
主要有以下組成部分:
1.高速資料緩衝區(Database buffer cache) 存放Oracle最近訪問的塊 DBWR
為了便於SGA的記憶體資料,Oracle把高速資料緩衝區分為以下3個部分:
a髒資料區:存放著已被修改過的資料,這些資料等待被寫入到資料檔案中。
b空閑區:空閑區中的資料區塊不包含任何資料,這些資料區塊可以被寫入資料,Oracle可以從資料檔案中讀取資料區塊,並將其存放到該區中
c保留區:包含那些被使用者訪問的資料區塊和明確保留以作為將來使用的資料區塊
2.重做日誌緩衝區(Redo log buffer cache) 資料庫進行修改時所產生的日誌資訊 LGWR
大小由LOG_BUFFER參數指定,也可以在執行個體啟動後動態修改。一般會設的較大些
3.共用池(Shared Pool)
是SGA保留地區,用於緩衝SQL語句、PL/SQL語句、資料字典、資源鎖、字元集以及其他控制結構等。包含一下兩個部分:
a--庫高速緩衝區(Library cache): 主要包括共用SQL區和私人SQL區兩個組成部分。庫快取區中存放最近使用過的SQL語句、PL/SQL語句的文本和執行計畫。當下一次執行相同的SQL語句或PL/SQL語句時,可以直接在庫高速緩衝區中找到之前已經產生的執行計畫,而不需要再次解析相同的SQL語句或PL/SQL語句,從而提高系統執行效率。
每條被緩衝的SQL 或PL/SQL語句都被分成兩個部分,分別被存放在共用SQL區和私人SQL區中。共用SQL區中存放SQL或PL/SQL語句的文法分析結果和執行計畫,如果以後要再次執行類似的語句,則可以利用共用SQL區中已緩衝的文法分析結果和執行計畫。私人SQL區存放SQL語句中的綁定變數、環境和會話等資訊,這些資訊屬於執行該語句的使用者的私人資訊,其他使用者則無法共用這些資訊。
b--字典快取區:用於存放Oracle系統內部管理所需要的資料字典資訊,如使用者名稱、資料對象和許可權等。
共用池的記憶體空間大小是可以動態改變的,一般通過修改參數SHARED_POOL_SIZE的值來實現
如:alter system set shared_pool_size=30m;
注意:共用池的大小不是越大越好,因為系統的記憶體資源是有限的,而且作業系統本身也要消耗一定的記憶體空間。
4.大型池(Large Pool)
在SGA中不是必需的記憶體結構,只有在以下某種特殊情況,執行個體才會使用大型池來減輕共用池的訪問壓力:
a--當使用復原管理員進行備份和恢複操作時,大型池作為I/O緩衝區使用
b--當使用I/O Slave 模擬非同步I/O功能時,大型池將被當做I/O緩衝區使用。
c--執行具有大量排序工作的SQL
d--當使用並行查詢,大型池作為查詢進程彼此交換資訊的地方。
大型池的緩衝區大小是通過LARGE_POOL_SIZE參數定義的,在11 g中,使用者可以使用alter system修改其大小
使用:show parameter large_pool_size;可以查看當前系統的大型池的記憶體大小
注意:如果在SGA區中,沒有設定大型池,則在執行個體需要時,Oracle系統會在共用池或PGA中分配一定的緩衝空間,這樣必然會影響到共用池或PGA的工作效率。
5.java池
用來提供記憶體空間給Java虛擬機器使用,目的是支援在資料庫中運行Java程式包,其大小由JAVA_POOL_SIZE參數決定。
6.流池
用在資料庫與資料庫之間進行資訊共用。如果沒有用到Oracle流,就不需要設定該池。流池的大小由參數STREAMS_POOL_SIZE決定。
程式全域區(PGA)
Program Global Area,也可以稱作使用者進程全域區。記憶體區在進程私人區中。雖然PGA是一個全域區,可以把代碼、全域變數和資料結構都可以放在其中,但地區內的資源並不像SGA中的那樣被所以使用者所共用,而是每個Oracle伺服器處理序都只用於屬於自己的那部分PGA資源。 各個服務進程PGA區總和即為執行個體PGA區的大小。通常有:
a--私人SQL區:
儲存變數以及SQL語句運行時的記憶體結構資訊,當每個使用者串連到執行個體時,都會在執行個體中建立一個會話。這些會話可能會在SGA區中建立一個共用SQL區,但在PGA區中可能會建立多個私人SQL區。把一個私人SQL區與對應共用SQL區合并在一起,就可以獲得一條SQL語句的完整快取資料。
另外,每個私人SQL區可以再分為靜態區和動態區兩部分。靜態區的資訊在會話過程中保持不變,只有當會話結束時,靜態區才會釋放掉;而動態區的資訊在整個會話過程中是不斷變化的,一旦SQL語句指定完畢,即使會話還沒有結束,動態區也被釋放掉。
b--會話區
用於存放使用者的會話資訊(如登陸使用者名稱)。如果資料庫處於共用伺服器串連模式下,則會話區將位於SGA地區,而不是PGA中
更改用:alter system set pga_aggregate_target=18m; 查看PGA:show parameter pga;
前台進程 不屬於執行個體的一部分,包括
a--使用者進程
那些能夠產生執行SQL語句的應用程式,無論是SQL *Plus,還是其他應用程式,只要是能產生或執行SQL語句,都被稱作使用者進程
兩個概念:串連和會話
串連:一個使用者進程與執行個體之間建立的通訊取到,這個渠道可以通過作業系統上的相關通訊進位或網路連接來實現。
會話:使用者進程與執行個體之間建立串連後形成的使用者與執行個體之間的互動方式,一般是使用者發出請求,資料庫執行個體為使用者返迴響應訊息的方式。
b--伺服器處理序
用於處理使用者會話過程中向資料庫執行個體發出的SQL語句或SQL *Plus命令,分為專用伺服器模式和共用伺服器模式。
後台進程
是一組運行於Oracle伺服器端的背景程式,是Oracle執行個體的重要組成部分。SMON,PMON,DBWR,LGWR,CKPT這5個後台進程必須正常啟動,否則將導致資料庫執行個體崩潰。
資料寫入進程(DBWR):
主要任務是負責將記憶體中的“髒”資料區塊寫回到資料檔案中。通常寫入不會是隨時進行的,所以一般在一下情況發生時,DBWR進程會將“髒”資料區塊寫入資料檔案:
1.當使用者進程執行插入或修改等操作時,需要將“新資料”寫入高速資料緩衝區,如果在高速資料緩衝區沒有找到足夠大的空閑資料區塊來存放這些“新資料",這時,Oracle系統將啟動DBWR進程將”髒“資料資料區塊寫入資料檔案,以獲得空閑資料區塊來儲存這些”新資料“
2.當檢查點進程啟動後,它會強制要求DBWR將某些”髒"資料區塊寫入資料檔案
3.當“髒”資料區塊在高速資料緩衝區中存放超過3秒鐘,DBWR進程會自動啟動檔案將某些“髒"資料區塊寫入到資料檔案中。
注意:可以修改SPFile中DB_WRITER_PROCESSES 參數,以允許使用多個DBWR進程(數量不要超過系統處理器的數量)
檢查點進程(CKPT)
可以看做是一個事件,當發生日誌切換時,會啟動檢查點進程。 DBA可以通過修改初始化參數SPFile中的CKECKPOINT_PROCESS為TRUE來啟動檢查點進程
日誌寫入進程(LGWR)
將重做日誌緩衝區中的資料寫入重做記錄檔。Oracle系統首先將使用者所做的修改日誌資訊寫入記錄檔,然後再將修改結果寫入資料檔案。
Oracle執行個體在運行中會產生大量日誌資訊,這些日誌資訊首先被記錄在SGA的重做日誌緩衝區中,當發生提交命令、或者重做日誌緩衝區的資訊滿1/3、或者日誌資訊存放超過3秒鐘,LGWR就將日誌資訊從重做日誌緩衝區讀出並寫入記錄檔組中序號較小的檔案中,一個日誌組寫滿後接著寫另外一組。當LGWR進程將所有的記錄檔都寫過一遍後,它將再次轉向第一個記錄檔組重新覆蓋。
歸檔進程(ARCH)
可選進程,在Oracle處于歸檔模式時,該進程才能起到作用。當各個記錄檔組都被寫滿而即將被覆蓋之前,先由歸檔進程把即將被覆蓋的記錄檔的日誌資訊讀出,然後再把這些”讀出的日誌資訊"寫入到歸檔記錄檔中。
當系統比較繁忙時,可能導致LGWR等待ARCH進程,可以修改LOG_ARCHIVE_MAX_PROCESS參數啟動多個歸檔進程,從而提高歸檔寫磁碟的速度。
系統監控進程(SMON)
資料庫系統啟動時執行恢複工作的強制性進程。比如,在並行伺服器模式下,SMON可以恢複另一個處於失敗的資料庫,使系統切換到另外一台正常的伺服器上。
進程監控進程(PMON)
用於監控其他進程的狀態,當有進程啟動失敗時,PMON會清除失敗的使用者進程,釋放使用者進程所用的資源。
鎖定進程(LCKN)
可選進程,並行伺服器模式下可以出現多個鎖定進程以利於資料庫同學
恢複進程(RECO)
分散式資料庫模式下一個可選進程,用於資料不一致時進行恢複工作。
調度進程(DNNN)
可選進程,在共用伺服器模式下使用,可以啟動多個調度進程
快照進程(SNPN)
用於處理資料庫快照集的自動重新整理,並通過DBMS_JOB包運行預定的資料庫預存程序。
預設情況下,Oracle 11g會啟動200多個後台進程。--295--(v$bgprocess[name,description])
Oracle 11g 體繫結構 --SGA PGA 前後台進程