Oracle10g data buffer cache的記憶體結構
buffer cache的記憶體結構
連結串列和Hash演算法是Oracle實現內部管理常用的方式。
連結串列是一種資料結構,透過將物件串聯在一起,從而構成連結串列結構,這樣如果要修改,刪除或查詢某個物件的話,
都可以先到連結串列中去查詢,而不必實際地訪問物理介質 。
使用者發出SQL語句(假設為 update buff_test set col2='cde' where id=3;), 根據SQL語句的執行計劃,相關的數
據塊被讀入buffer cache, Oracle都會抽取資料塊的頭部,在記憶體中構建buffer header, 並將這些buffer header
串成連結串列,而buffer header裡面記錄的指標就指向buffer cache中的該資料塊本身。 於是Oracle在buffer cache
中搜尋某個資料塊時,就不用buffer cache中找,而是直接掃描連結串列上該資料塊所對應的buffer header, 然後根據
buffer header所記錄的指標就能在buffer cache中直接定位該資料塊了。
在library cache中,SQL文字轉化為ASCII碼,然後使用hash演算法計算出對應的hash value.
在buffer cache中,Oracle抽取buffer cache的資料塊的頭部,在記憶體中構建buffer header, 然後對buffer header
中記錄的資料塊地址和資料塊型別運用hash函式,得到該資料塊所屬的組號(hash bucket)。
hash bucket buffer header buffer cache
[0] ---------> [xxx] --------> 每個buffer header中的指標指向buffer cache中的該block本身。
[1] ---------> [xxx]-->[xxx] --------> (這裡是兩個指標指向...)
[2] ---------> [xxx]-->[xxx]
[3] ---------> [xxx]
[4] ---------> [xxx]-->[xxx]
[5] ---------> [xxx]-->[xxx]-->[xxx] --------> (這裡是三個指標指向...)
備註: 上面的buffer header部分的箭頭連結串列被稱為hash chain .
當前臺發出SQL語句,Oracle根據執行計劃找到符合條件的資料塊(資訊),然後Oracle會根據對請求的資料
塊的地址以及資料塊的型別做為引數,應用hash函式運算,得到要找的資料塊所處的hash bucket, 也就是決定資料
塊在哪條hash chain上,然後Oracle進入該hash chain,從上面所掛的第一個buffer header開始,根據buffer
header 指標找到資料塊體,掃描其中資料,確認是否是SQL語句需要的塊,如果是,則返回該塊所需要的資料;
否則繼續向下搜尋直到最後一個buffer header為止,如果一直都沒有找到,則呼叫物理I/O, 到磁碟上資料檔案
上把該塊所含有的內容複製一份到一個可用的buffer裡,同樣構建該塊的buffer header, 然後根據hash值將buffer
header 掛到hash chain上去。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-664577/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- 記憶體結構記憶體
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體
- 效能測試必備知識(11)- 怎麼理解記憶體中的Buffer和Cache?記憶體
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- 結構體記憶體對齊結構體記憶體
- JVM的基本結構和JVM的記憶體結構JVM記憶體
- MySQL入門--記憶體buffer poolMySql記憶體
- MySQL整體架構與記憶體結構MySql架構記憶體
- JVM記憶體結構劃分JVM記憶體
- JVM(七):JVM記憶體結構JVM記憶體
- 理解JVM(一):記憶體結構JVM記憶體
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- JVM及其記憶體結構劃分JVM記憶體
- JVM之記憶體結構詳解JVM記憶體
- JVM學習(一)——記憶體結構JVM記憶體
- Oracle OCP(39):Database 記憶體結構OracleDatabase記憶體
- JVM元空間Metaspace的記憶體結構JVM記憶體
- InfluxDB中的inmem記憶體索引結構解析UX記憶體索引
- IO之核心buffer----"buffer cache"
- 33、buffer_cache_3(redo的產生、LRBA、buffer cache裡的等待事件)事件
- struct結構體大小的計算(記憶體對齊)Struct結構體記憶體
- C++ struct結構體記憶體對齊C++Struct結構體記憶體
- c 結構體記憶體對齊詳解結構體記憶體
- STM32記憶體結構介紹和FreeRTOS記憶體分配技巧記憶體
- buffer與cache的區別
- Linux Buffer/Cache 的區別Linux
- Oracle Cache Buffer ChainsOracleAI
- [轉帖]深入JVM - Code Cache記憶體池JVM記憶體
- 【Cache】將常用的“小表”快取到Buffer Cache快取
- 解析記憶體中的高效能圖結構記憶體
- 瀚高資料庫記憶體結構資料庫記憶體
- Redis 雜湊結構記憶體模型剖析Redis記憶體模型
- JVM讀書筆記之java記憶體結構JVM筆記Java記憶體
- 淺談JVM記憶體結構 和 Java記憶體模型 和 Java物件模型JVM記憶體Java模型物件