體系結構和備份恢復原理
1 Oracle database 最重要的是online redo log
類比法
controlfile :公司高管
datafile :生產車間
online redo log:財務處
-
注釋:
system表空間是第一生產車間;
當公司高管換了,財務處也需要換;
2 shared pool主要包括:
library cache:放代碼(sql,pl/sql,java)
data dictionary cache:放數據字典
注釋:
在空間分配上,數據字典是男孩,代碼是女孩,Oracle server有重男輕女思想,若cache命中率低,要看的是女孩,而非男孩。因為會先給男孩喂奶水。
最近最少使用到代碼會被銷隱掉,否則,不斷的代碼進來,shared pool會內存不足。
3 large pool
下列場景需要用到large pool:
用rman備份與恢復;
并行sql;
異步I/O;
共享服務器模式;
注釋:
large pool是shared pool的助理,若沒有l(wèi)arge pool,則會池遷移到shared pool。
4 java pool
是個跑馬場,不是放java代碼的地方
5 database buffer cache和redo log buffer
1)二者關系:
redo log buffer 畫家(描述者)
database buffer cache 模特(被描述者)
2)LGWR只能有一個;DBWR可以有多個
3)Oracle愛寫日志,不愛寫數據塊。因為日志的單位是項(200個字節(jié)左右),而數據塊的單位是塊。
4)redo log buffer要么全寫,要么全不寫;而database buffer cache則悠著點,一次寫一點
5)什么時候寫日志?
每3秒寫
1/3滿寫
commit的時候寫
n M臟數據的時候寫
DBWR寫之前寫
6)什么時候寫數據塊?
完全檢查點事件發(fā)生
超時發(fā)生(增量檢查點)
臟塊達到域值(增量檢查點)
沒有free buffer的時候(對上面一條到補充)
6 Oracle是個交易系統,其交易發(fā)生在database buffer cache里。
具體交易:
“讀”:server process去data dictionary cache查詢,將需要的讀到database buffer cache,然后,在PGA構造游標(結果集的指針),每一根指針都指向一個rowid,如果需要排序,連接,一致性讀,則只需要對指針進行操作。所以,PGA是用戶最直接的使用體驗。
“改”: 申請TADDR
記日志
動兩邊事務槽,加行頭鎖
“寫”:檢查點進程計算工作負載,來定檢查點,在檢查點時,發(fā)生檢查點事件,當檢查點事件發(fā)生時逼著DBWRn按塊第一次變臟的順序寫出一部份,由于這一部分臟塊的寫出,會在日志文件產生檢查點位置。
7 RBA指針后有日志項,原因有二:
1)整個表空間級下線
2)按塊第一次變臟的順序寫
8 用戶不直接和Oracle server打交道,而是和server process扛上了。
類比:
server process 導購小姐
user process 客人
9 “一根骨頭掛點肉”
這俗語可以形容server process 和PGA的關系
骨頭:server process
肉 :PGA
“一條繩上的兩個螞蚱”
螞蚱:SADDR,TADDR
這話是說,新值在寫的時候,舊值會跟著被寫,同呼吸,共命運。所以,讀上來8k,寫下去便是16k,總共I/O為24k。
10 透過現象看本質
提交的本質:釋放鎖,寫日志,事務槽進入倒計時
正常關機的本質:
1)關閉JAVA進程(Oracle大戰(zhàn)java)
2)寫檢查點
a)將current_scn凍結
b)把data block寫下
c)讓checkpoint_change#等于current_scn
注釋:
select resetlogs_change# a,checkpoint_change# b,current_scn c
from v$database
其中,a<b<c
a:建庫的時間原點
b:寫數據塊的界,寫后,內存中的所有數據塊多比b來得大。所以,增量檢查點這個會被延遲標識,因為,還沒有全部下來。
11 system表空間
1)存放數據字典表
2)包,過程,函數和觸發(fā)器等pl/sql對象
12 sysaux表空間
1)90%用來收集工作負載
2)10%存放sysman到東西
類比:
生活中,水表,電表,煤氣表,這些表上面的度數,都是“逝者如斯夫”,為了比較,合理開支,需要抄表。
13 buffer的四種狀態(tài)
free:寫下去的時候
clean:剛讀上來
pinned:特殊的clean,被加了latch,正要用
dirty:被改了
14 RBA指針的碎碎念
方向:總是無縫下移
出生地:控制文件
指向地:日志文件
過帳:對應的數據塊已寫到數據文件中
active :被RBA覆蓋的日志(RBA只有一根)
完全檢查點會直接把RBA干到重做日志組的最后一條
15 斷電本質:SGA突然沒有了,實力崩潰
與斷電本質一致的是:
干掉SMON進程(kill -9 PID)
shutdown abort
16 在mount階段,由SMON去讀控制文件,并比較:
1)上次關機的SCN A
上次關機的checkpoint B
2)日志組最后一條的記錄 C
RBA指針的位置 D
若正常關機,則 A=B C=D
若不正常關機,則 A>B D>C
這時,就需要派SMON去前滾,按重做日志的記錄在內存中重做一遍,直到C=D。
本文出自:億恩科技【mszdt.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|