OCP知識點講解 之 什麼是Buffer Cache?
一、Buffer cache作用:
Buffer cache是Oracle建立的資料檔案的緩衝區。Oracle中所有Select、DML、DDL等命令,凡是需要所有對資料檔案進行讀、寫操作的,基本上都是對Buffer cache進行讀、寫操作。如果需要讀或寫的塊沒有包括在Buffer cache,Oracle會先把它讀進Buffer cache中,再進行讀、寫。
通常,如果要讀的塊已經在Buffer cache中了,Oracle將不必再訪問磁碟資料檔案,這個讀操作被稱為邏輯讀。也就是沒有真正讀寫磁碟的意思。
如果要讀的塊不在Buffer cache,那麼Oracle必須到磁碟上將其調入Buffer cache中,這個操作被稱為物理讀。再將塊物理讀進Buffer cache後,Oracle再從Buffer cache中邏輯讀取需要的資料。
二、Buffer cache大小的設定:
在Oracle 10g中,非常簡單,我們不必設定Buffer cache的大小,只需設定一個sga_target引數,SGA目標值,10g將會根據你的資料庫的情況,自動調整共享池、Buffer cache池等等所有SGA中記憶體元件的大小。db_cache_size引數是設定Buffer cache大小的,和共享池一樣,在Oracle 10g中,它也只是個下限值。
Buffer cache是磁碟資料檔案的快取,資料檔案的基本讀寫單位是Oracle資料塊,最常的塊大小是4KB、8KB、16KB等等,在我們的例項庫,資料庫塊大小是8KB。也就是說Oracle一次讀寫將從資料檔案中讀寫8KB位元組。Buffer cache既然是資料檔案的直接快取,Buffer cache的記憶體塊大小當然也是8KB了。
Oracle從9i之後開始支援多重塊大小,你在建立資料庫時設定的塊大小被稱為標準塊大小,除了標準塊大小外,我們還可以使用多個非標準的塊大小。就像我們的例項庫,標準塊大小是8KB,我們還可以使用2KB、4KB、16KB和32KB的非標準塊大小。
那麼,資料庫有必要使用多種塊大小嗎?絕對有必要。對於全表掃描操作,越大的塊效率越高。因為全表掃描要訪問表所有的行,所有塊。塊越大,相同大小的表所佔用的塊就越少。而每讀一個塊,Oracle都算作一次物理讀,表塊越少,訪問全表所需的物理讀就越少。因此,全表掃描操作適合大塊。但對於索引掃描,索引掃描是一種隨機的形式訪問表中的行。隨機訪問下小塊效率更好。因為你每訪問一個塊,Oracle都要將塊讀進Buffer cahce,這樣做的目的是希望你再次訪問塊中其他行時,不必再從磁碟讀取(從磁碟中讀是物理讀),而直接從記憶體中讀取(從記憶體中讀是邏輯讀)。隨機訪問很可能訪問完塊中一行後,就不再訪問此塊了。因此是隨機本身就是無規律的訪問。因為小塊佔用的記憶體少,隨機訪問下,將小塊讀入記憶體比將大塊讀入記憶體,能更節省記憶體空間,提高記憶體的使用效率。因此,隨機訪問下,小塊的效率比大塊要好一些。還有,大塊的爭用可能性更高,而小塊爭用的可能性低。因為大塊中行比較多,而小塊中行少。這就好像一個團隊有100個人,另一個團隊有10個人,當然人越多越容易發生矛盾。總之,大塊有大塊的好低,小塊有小塊的好處,如果資料庫只能使用一種塊大小,這顯然是不太合理的。
我們在Oracle體系結構部分就瞭解瞭如何配置使用非標準塊大小,其要點有如下兩點:
·只有配置了相應非標準塊大小的Buffer cache池後,才能使用非標準塊大小
·非標準塊大小是在表空間層指定的。一旦在表空間層確定了表空間所使用的塊大小,以後被建立在此表空間中的所有表、索引等等段物件,都將按表空間塊大小為準。
有一定需要補充的是,用來配置非標準塊大小Buffer cache的初始化引數db_16k_cache_size、db_2k_cache_size、db_32k_cache_size、db_4k_cache_size、db_8k_cache_size,它們並不在Oracle自動記憶體管理的範籌內,Oracle並不會自動的調整他們的大小。你將這些引數設定為多大,只要SGA內還有空閒記憶體,Oracle將會立即分配相應大小的記憶體空間。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29439655/viewspace-1357843/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 前端基礎知識之什麼是節點Node?前端
- Cache 和 Buffer 有什麼區別?
- IO之核心buffer----"buffer cache"
- 什麼是知識
- vertical-align知識點講解
- Thread執行緒知識點講解thread執行緒
- Android Fragment用法知識點的講解AndroidFragment
- 【知識分享】web伺服器是什麼有什麼特點Web伺服器
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- 什麼是 True Cache?
- 效能測試必備知識(11)- 怎麼理解記憶體中的Buffer和Cache?記憶體
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux
- 計算機buffer和cache的區別?linux運維學習知識計算機Linux運維
- 網路安全的優點是什麼?網路安全都學什麼知識
- 【知識分享】ddos防火牆的作用和特點是什麼防火牆
- Java培訓:Java四大知識點講解Java
- 研發知識:MDD、MDF是什麼?
- Oracle Cache Buffer ChainsOracleAI
- Java四大知識點講解,初學者必看!Java
- 【雲端計算小知識】什麼是雲端計算?雲端計算特點是什麼?
- Vue常考知識點--extend 能做什麼Vue
- 這絕對是你的知識盲點,NUMA的為什麼存在
- 【知識分享】asp伺服器是什麼有什麼用途伺服器
- 【知識分享】伺服器cdn是什麼有什麼功能伺服器
- 【知識分享】代理伺服器是什麼有什麼用伺服器
- 【Python小知識】什麼是HTTP和HTTPS?有什麼不同?PythonHTTP
- 知識點,JavaScript與Java之間有什麼區別和聯絡?JavaScript
- react的詳細知識講解!React
- 給女朋友講解什麼是代理模式模式
- 網路安全網路協議知識點中,http協議是什麼?協議HTTP
- 【知識分享】什麼是伺服器租用需要注意什麼伺服器
- 【知識分享】網路伺服器是什麼有什麼作用伺服器
- 【知識分享】安全漏洞掃描是什麼有什麼功能
- 【知識分享】DHCP伺服器是什麼有什麼優勢伺服器
- SpringMVC系列知識:(二)什麼是springMVC,為什麼要使用springMVCSpringMVC
- 【知識分享】什麼是終端伺服器伺服器
- 【知識分享】什麼是IT運維管理服務運維
- 【IT運維小知識】安全組是什麼意思?運維
- 【TcaplusDB知識庫】什麼是TcaplusDB資料庫?資料庫