oracle體系結構總結 1.資料高速緩衝區(data buffer cache)2.redo log buffer
一.資料高速緩衝區(databuffer cache)
oracle使用LRU(least recently used)演算法管理buffer cache.即清楚最早沒有使用的資料塊
-------------------------------------------------------------------------------------------------------------------------------------------------
對於緩衝區的管理機制,有冷端和熱端的解釋。
HOT COLD
A B C D E F G H I J
假設新資料塊
K 將要被讀入,又沒有空閒位置,則
Oracle 會對冷端頭
J 塊進行判斷:
假設
J 被訪問次數為
1,Oracle
將會認為
J 不是一個經常被訪問的塊(冷) ,則會將
J
塊踢出佇列,將
K 插入至
F 的位置,F
和其他塊右移:
HOT COLD
A B C D E
K F G H I
假設新資料塊
L 將要被讀入,又沒有空閒位置,則
Oracle 會對冷端頭
I 塊進行判斷:
假設
I 被訪問次數為
5,Oracle
將會認為
I 是一個經常被訪問的塊(熱) ,則會將
I 塊放
入熱端頭,A
和其他快右移如下圖所示:
HOT COLD
I
A B C D E K F G H
這時,將對下一個冷端頭塊
H 進行判斷:
假設
H 被訪問次數為
1,Oracle
將會認為
H 不是一個經常被訪問的塊(冷) ,則會將
H
塊踢出佇列,將
L 插入至
E 的位置,E
和其他塊右移:
HOT COLD
I A B C D
L E K F G
但是這時,我們會發現。I
塊被放入熱端頭,經過漫長的時間,I
塊最終會被放到冷端
頭進行判斷;如果這段時間中,即使
I 沒有再被訪問過,I
的訪問次數也仍然是
5,這樣
I
將再次回到熱端頭,這樣就造成了死迴圈,I
永遠無法被踢出列表。
因此,當
I 被放到熱端頭的時候,訪問次數將會被清零。如果這段時間
I 被訪問多次,
則有機會回到熱端頭,否則,可能被踢出列表。
-------------------------------------------------------------------------------------------------------------------------------------------------------
buffer cache的大小管理
1.檢視
show parameter db_cache_size/db_recycle_cache_size/db_keep_cache_size...
2.修改
alter system set db_cache_size=500m;
3.清空
alter system flush buffer_cache;
二.重做日誌緩衝區(redo log buffer)
重做日誌緩衝區用來記錄對資料緩衝區資料進行的修改,可迴圈使用,當用戶進行dml操作或者ddl操作時,
會改變data buffer cache的相應緩衝區。在修改此部分之前,oracle會自動生成重做項,將這些緩衝區的變化記載到
redo log buffer,每條重做項記載了修改的時間、被修改的塊、修改位置及新資料。redo log buffer被迴圈使用,當redol og buffer填滿時,
資料庫將重做日誌緩衝區的內容寫入資料檔案。
redo log buffer 的大小由 Log_buffer初始換引數決定。
show parameter log buffer