資料庫訪問緩衝區的lru與mru演算法
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中對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.
圖 1我們再來看另外一種情況:
在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.
圖 2(王朝網路 wangchao.net.cn)
dedicated for the .net fans to get
started with the microsoft's .net
framework. featuring technical
articles and simplified codes to
help aspiring .net developers to
take a leading edge.(王朝網路 wangchao.net.cn)
case:
上海有乙個資料庫,北京有另乙個資料庫,都是oracle9i 標準版.
在上海的資料庫裡,需要複製北京的乙個表. 每天定時複製一次.由於資料量
較大,不能採用全備份恢復的方法.
故採用增量snapshot
procedure:
step1:
在上海市伺服器端,建立網路服務名beijing
$host$=
(description=
(address_list=
(address=(protocol=tcp)(host=$beijing_server$)(port=1521))
)(connect_data=(server_name=$bjora$))
)此步驟可以用oracle的網路配製,也可以直接修改tnsnames.ora在上海市伺服器
端. (提問?在unix下,哪種方式比較普遍, 直接修改tnsnames.ora?)
step2:
上海市伺服器,建立連線北京的dblink
create public database link
$dblink$
connect to $username$ identified by $password$ using '$host$'
step3.
在北京的伺服器上建立snapshot log
create snapshot log on $tab$ with primary key;
step4
在上海的伺服器上建立snapshot
create snapshot $tab$ build immediate refresh
fast next sysdate + $x$/24 as
select * from
tab$@$dblist$]$tab$@$dblist$
step5
如果手工重新整理
exec dbms_snapshot.refresh('$tab$');
以上經過驗證,master 資料的增刪改都能快速通過.
如果不用oracle企業版的高階複製,也能實行基本的簡單複製,滿足一般業務要求(王朝網路 wangchao.net.cn)
資料庫訪問緩衝區的LRU與MRU演算法
1.cache hit and cache miss 當使用者第一次向資料庫發出查詢資料的請求的時候,資料庫會先在緩衝區中查詢該資料,如果要訪問的資料恰好已經在緩衝區中 我們稱之為cache hit 那麼就直接用緩衝區中讀取該資料.反之如果緩衝區中沒有使用者要查詢的資料那麼這種情況稱之為cache ...
訪問緩衝區的LRU與MRU演算法
資料庫 訪問緩衝區的 lru與 mru演算法 1.cachehitandcachemiss 當使用者第一次向資料庫發出查詢資料的請求的時候,資料庫會先在緩衝區中查詢該資料,如果要訪問的資料恰好已經在緩衝區中 我們稱之為cachehit 那麼就直接用緩衝區中讀取該資料.反之如果緩衝區中沒有使用者要查詢...
2 2 資料庫高速緩衝區
您所在的位置 讀書頻道 資料庫 oracle 2.2 資料庫高速緩衝區 2012 05 10 21 38 張天慧 清華大學出版社 字型大小 t t 綜合評級 oracle管理之道 第2章oracle例項,本章重點在於深入解析oracle本身執行時的記憶體空間,也就是oracle的例項主體,但誠如本章...