1. 程式人生 > 其它 >OCP筆記3:體系結構

OCP筆記3:體系結構

例項與資料庫:

例項 = 記憶體(PGA、SGA) + 程序(SMON、PMON、DBWn、LGWR 、CKPT  )

資料庫 = 三大核心檔案(Data files、Control files、Redo Log files)

其它:

使用者記憶體區(每一個客戶端連線)

其它檔案(引數檔案,密碼檔案,歸檔日誌)

其它程序(RECO,ARCn,LREG,MMON,MMAN,MMNL,CJQ0,QMNC)

 

 

SAG:

儲存全域性資料,所有程序共享的記憶體。

資訊檢視:v$sgainfo

SGA的重要部分:

Database Buffer Cache(DBC):就是Block(頁)的快取,計算引擎無論讀或寫檔案中的資料,先把要讀寫的那部分Block載入到DBC,寫之前要加鎖,得到鎖之後,讀或寫的就是這個DBC,而不是資料檔案,DBWR(或DBWn)會適時將DBC寫到磁碟。引數db_cache_size控制其大小,如果是0表示自動管理。每個Block的大小是建立表空時設定,不可修改,從db_block_size檢視塊大小。

Redo Log Buffer:redo日誌的快取,引數log_buffer控制其大小,更改記錄的操作,通過併發排程後寫入DBC,還會寫入Redo Log Buffer,commit時Redo Log Buffer會部分落盤,但DBC不會。

Shared Pool:包括資料字典快取,查詢結果快取,執行計劃快取,大小由shared_pool_size控制。

Large Pool:與Shared Pool類似,用於需要大記憶體的情況,以減輕Shared Pool負擔。

Java Pool:專用於儲存Java程式碼和資料。

Streams Pool:專用於儲存流佇列資料。

PGA:

客戶端接入伺服器時,在伺服器端為每個連線分配一個程序和記憶體,這個記憶體就是PGA,SQL計算時(如排序、聚合)的中間資料,使用者資料,cursor等,就放在PGA中,UGA在PGA中。

程序:

程序分user process、server process和background process。

user process就是sqlplus或其它客戶端程序。

server process是服務端為每個連線來的客戶端建立的程序,其記憶體就是PGA,也會訪問SGA,這個程序負責這樣幾個重要工作:

1、SQL解析和執行計劃計算。

2、從SGA的DBC讀取需要的記錄,用於SQL執行計劃的計算,如果DBC中沒有需要的資料,則從由server process從data file中讀取Block到DBC中。

3、執行insert、update語句時,將更改寫入DBC(但是不負責從DBC到磁碟),如果排程局阻塞它,就等待。

4、將對資料塊的修改,轉為變更向量,寫到Redo Log Buffer(但是不負責從Redo Log Buffer到磁碟)。

background process是多個程序,服務所有客戶連線的程序,訪問的是SGA記憶體,包括下面幾個主要程序:

SMON:核心程序System Monitor,負責例項恢復,釋放不再使用的臨時段,合併空閒資源。

PMON:核心程序Process Monitor,監控其他後臺程序,並檢測會話中的問題。
1、 當會話異常終止時, PMON 銷燬對應伺服器程序。 釋放所有當前掛起的鎖定。 釋放伺服器端使用的資源(PGA 記憶體等) 。 回滾正在進行的未完成的事務。
2、 監視其他後臺程序, 必要時重啟程序或終止例項
3、 監控空閒會話超時。 

DBWn:核心程序,負責將DBC寫到磁碟,在checkpoint時會寫,在其它適當時機也會寫,此程序可以有多個。

考點:

1、 server process 對資料檔案執行讀操作, 而 dbwr 負責對資料檔案執行寫操作。

2、 commit 時 dbwn 有何舉動?它什麼也不做!

LGWR :核心程序,負責將Redo Log Buffer裡的記錄落盤,注意不同於DBWn程序可以有多個,LGWR程序只有一個,為了保證一致性,Redo Log Buffer落盤時必須注意順序。

CKPT:核心程序,執行檢查點操作的程序。

ARCn:寫歸檔日誌程序

檢查點:

手動執行檢查點操作:

alter system checkpoint

資料庫會因為一些事件自動觸發檢查點操作。

檢查點操作時,檢查點資訊會寫到control file和資料檔案的頭部。

 資料檔案(data files):

檢視資料檔案資訊 v$datafile,select name from v$datafile;

例如:/u01/app/oracle/oradata/CDB/pdb1/system01.dbf

dba_data_files、dba_tablespace、dba_segments、dba_extents

資料檔案邏輯結構:

表空間和資料檔案的關係:

表空間可以由多個數據檔案組成,一個數據檔案只能屬於一個表空間。

一個表空間裡可以儲存多個表,一個表的資料可能跨多個數據檔案。

段(segment)是指資料庫物件,例如表、索引等,由此可見,一個段也是可以跨多個數據檔案的。

PL/SQL 過程、 檢視、 序列不是段,它們只是資料字典中的一條記錄。

區(extent)包括一組連續的Block,extent包含Block個數可變。段由若干個區組成,資料字典管理的最小粒度就是extent。

                      Oracle以extend為單位,給段分配空間,一個extent不可以跨data file,一個extent只能屬於一個data file。

塊(Block)讀寫的最小單位,有內部結構,表記錄儲存在Block中,Oracle塊以OS塊的整數倍,例如預設Oracle塊是8K,資料字典不管理塊。