1.Cache Hit and Cache Miss
當(dāng)使用者第一次向數(shù)據(jù)庫發(fā)出查詢數(shù)據(jù)的請求的時候,數(shù)據(jù)庫會先在緩沖區(qū)中查找該數(shù)據(jù),如果要訪問的數(shù)據(jù)恰好已經(jīng)在緩沖區(qū)中(我們稱之為Cache Hit)那么就直接用緩沖區(qū)中讀取該數(shù)據(jù).
反之如果緩沖區(qū)中沒有使用者要查詢的數(shù)據(jù)那么這種情況稱之為Cache Miss,在這種情況下數(shù)據(jù)庫就會先從磁盤上讀取使用者要的數(shù)據(jù)放入緩沖區(qū),使用者再從緩沖區(qū)讀取該數(shù)據(jù).
很顯然從感覺上來說Cache Hit會比Cache Miss時存取速度快.
2. LRU(最近最少使用算法) and MRU(最近最常使用算法)
所謂的LRU(Least recently used)算法的基本概念是:當(dāng)內(nèi)存的剩余的可用空間不夠時,緩沖區(qū)盡可能的先保留使用者最常使用的數(shù)據(jù),換句話說就是優(yōu)先清除”較不常使用的數(shù)據(jù)”,并釋放其空間.之所以”較不常使用的數(shù)據(jù)”要用引號是因?yàn)檫@里判斷所謂的較不常使用的標(biāo)準(zhǔn)是人為的、不嚴(yán)格的.所謂的MRU(Most recently used)算法的意義正好和LRU算法相反.
下面我們通過Oracle 9i Cache中對LRU和MRU的使用來看一下兩者在緩沖區(qū)工作機(jī)制中的作用和區(qū)別:
???? 在Oracle 9i中有LRU List的概念: 我們可以把LRU List想象成是一連串的緩沖區(qū)集合,兩端分別是LRU端和MRU端, 當(dāng)數(shù)據(jù)庫從磁盤上讀取數(shù)據(jù)放入緩沖區(qū)時,系統(tǒng)必須先確定緩沖區(qū)中有free buffers,這個時候Oracle 9i會掃描LRU List,掃描的基本原則是:
1.???? 從LRU端到MRU端;
2.???? 當(dāng)掃描到free buffer或已掃描的緩沖區(qū)數(shù)目超過臨界值時,就會停止掃描動作;
????? 如果在掃描過程順利的在LRU List中找到了free buffer,那么Oracle 9i就把從磁盤讀出的數(shù)據(jù)寫到free buffer中然后把free buffer加到LRU List的MRU端.
????? 那如果掃描過程沒有在LRU List中找到free buffer怎么辦?當(dāng)然是從LRU List的LRU端開始清除緩沖區(qū),如此一來就可以騰出新的空間了.
????? 下圖就是一個例子:
????????? 使用者查詢數(shù)據(jù)A,初始的時候LRU List中沒有數(shù)據(jù)A,于是Oracle 9i到磁盤讀取A,然后放到LRU List的MRU端,使用者再從LRU List中讀取數(shù)據(jù)A,同理對于B,C…當(dāng)LRU List滿了以后,如果使用者查詢N,此時N不在LRU List中而且LRU List中已經(jīng)沒有free buffer了,此時Oracle 9i就開始從LRU端淘汰A以騰出空間存放N.
????????????????????? 圖 1
我們再來看另外一種情況:
??? 在State 3之后,恰好使用者持續(xù)的查詢A—這將會導(dǎo)致A一直被放置在靠近MRU端的緩沖區(qū),結(jié)果將如圖State m’所示,你會發(fā)現(xiàn)圖2的State m’與圖1的State m緩沖區(qū)存放的數(shù)據(jù)完全一樣但是存放位置不一樣.此時LRU List滿了,如果再放N的時候LRU List`淘汰的是B,因?yàn)?/span>A的查詢率高于B,所以LRU List讓A在緩沖區(qū)中呆上較長的時間而先淘汰掉”較不常用的”的B.
???????????????????????????? 圖 2
posted on 2009-09-05 00:27
jadmin 閱讀(160)
評論(0) 編輯 收藏