Jason ---分享,共同進步

          激情成就夢想,努力創造未來
          隨筆 - 53, 文章 - 1, 評論 - 45, 引用 - 0
          數據加載中……

          使用算法

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

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

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

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

          1.     從LRU端到MRU端;

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

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

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

                下圖就是一個例子:

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


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

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

           

          posted on 2008-01-29 14:27 agun 閱讀(199) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 光泽县| 陕西省| 武强县| 广宁县| 义马市| 嘉祥县| 那坡县| 南岸区| 兴化市| 辽宁省| 交城县| 垫江县| 丹寨县| 平远县| 上犹县| 东辽县| 乐安县| 萍乡市| 滁州市| 旅游| 宜都市| 莆田市| 库尔勒市| 香港| 赤峰市| 湘乡市| 安仁县| 沙田区| 柳林县| 孙吴县| 铜陵市| 长寿区| 潼南县| 饶阳县| 通榆县| 文安县| 文化| 比如县| 德格县| 宁陕县| 台江县|