posts - 495,  comments - 11,  trackbacks - 0

          1.Cache Hit and Cache Miss

          當使用者第一次向數據庫發出查詢數據的請求的時候,數據庫會先在緩沖區中查找該數據,如果要訪問的數據恰好已經在緩沖區中(我們稱之為Cache Hit)那么就直接用緩沖區中讀取該數據.

          反之如果緩沖區中沒有使用者要查詢的數據那么這種情況稱之為Cache Miss,在這種情況下數據庫就會先從磁盤上讀取使用者要的數據放入緩沖區,使用者再從緩沖區讀取該數據.

          很顯然從感覺上來說Cache Hit會比Cache Miss時存取速度快.

          2. LRU(最近最少使用算法) and MRU(最近最常使用算法)

          所謂的LRU(Least recently used)算法的基本概念是:當內存的剩余的可用空間不夠時,緩沖區盡可能的先保留使用者最常使用的數據,換句話說就是優先清除較不常使用的數據”,并釋放其空間.之所以較不常使用的數據要用引號是因為這里判斷所謂的較不常使用的標準是人為的、不嚴格的.所謂的MRU(Most recently used)算法的意義正好和LRU算法相反.

          下面我們通過Oracle 9i Cache中對LRUMRU的使用來看一下兩者在緩沖區工作機制中的作用和區別:

          ???? Oracle 9i中有LRU List的概念: 我們可以把LRU List想象成是一連串的緩沖區集合,兩端分別是LRUMRU, 當數據庫從磁盤上讀取數據放入緩沖區時,系統必須先確定緩沖區中有free buffers,這個時候Oracle 9i會掃描LRU List,掃描的基本原則是:

          1.???? LRUMRU;

          2.???? 當掃描到free buffer或已掃描的緩沖區數目超過臨界值時,就會停止掃描動作;

          ????? 如果在掃描過程順利的在LRU List中找到了free buffer,那么Oracle 9i就把從磁盤讀出的數據寫到free buffer中然后把free buffer加到LRU ListMRU.

          ????? 那如果掃描過程沒有在LRU List中找到free buffer怎么辦?當然是從LRU ListLRU開始清除緩沖區,如此一來就可以騰出新的空間了.

          ????? 下圖就是一個例子:

          ????????? 使用者查詢數據A,初始的時候LRU List中沒有數據A,于是Oracle 9i到磁盤讀取A,然后放到LRU ListMRU,使用者再從LRU List中讀取數據A,同理對于B,C…LRU List滿了以后,如果使用者查詢N,此時N不在LRU List中而且LRU List中已經沒有free buffer,此時Oracle 9i就開始從LRU淘汰A以騰出空間存放N.

          ????????????????????? 1

          我們再來看另外一種情況:

          ??? State 3之后,恰好使用者持續的查詢A—這將會導致A一直被放置在靠近MRU的緩沖區,結果將如圖State m’所示,你會發現圖2State m’與圖1State m緩沖區存放的數據完全一樣但是存放位置不一樣.此時LRU List滿了,如果再放N的時候LRU List`淘汰的是B,因為A的查詢率高于B,所以LRU ListA在緩沖區中呆上較長的時間而先淘汰掉較不常用的B.

          ???????????????????????????? 2

          posted on 2009-09-05 00:27 jadmin 閱讀(163) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 桑日县| 咸丰县| 颍上县| 顺平县| 股票| 玛纳斯县| 宣威市| 读书| 龙山县| 阿鲁科尔沁旗| 泉州市| 桐梓县| 肃宁县| 和平区| 桓仁| 辽宁省| 松原市| 宁河县| 内江市| 新巴尔虎右旗| 名山县| 凯里市| 昌邑市| 都昌县| 黄大仙区| 噶尔县| 名山县| 扎鲁特旗| 保康县| 隆回县| 共和县| 库车县| 普格县| 栖霞市| 铁岭县| 南部县| 五指山市| 曲水县| 岑巩县| 黎平县| 广宁县|