oracle buffer block,8 Oracle深度学习笔记——BUFFER CACHE深入一
8.Oracle深度學習筆記——BUFFER CACHE深入一
最近項目一直和ORACLE死磕,感覺總是找不到出口,只能多看書少說話了。
先記錄多少是多少吧!
BUFFER CACHE在ORACLE的所有內存池中占了最大空間。
1.??HASH鏈表
Oracle通過HASH算法確定文件中的塊是否在BUFFERCACHE中。
HASH算法在搜索算法中最快的,在內存中搜索數據的算法都是采用HASH算法。
HASH中有一個概念叫做Bucket,數量由參數_db_block_hash_buckets參數設置。
每當要讀取一個數據塊的時候,根據塊艘在的文件、塊號計算一個HASH值。通過HASH值得到BUCKET,就可以得到BUCKET中的內容。
BUCKET中保存一個指向CacheBuffers Chain的鏈表頭的指針。
每個Buffer都有一個BufferHeader叫做Buffer Header (簡稱BH).
HASH值一樣的BUFFERHeader組成鏈表,鏈表叫做CBC鏈表(Cache Buffer Chains)
BUFFERCAHCHE 哈希表的BUCKET中,存放的CBC鏈表頭。
Oracle查找BUFFER的過程大概是這個樣子的:
數據庫要找某個號的塊,那么先根據文件號、塊號計算塊的HASH值,然后通過HASH值找到對應的BUCKET,BUCKET指向CBC鏈頭,然后在鏈表搜索每個BH(文件號,塊號),取出其中的BA,根據BA找個需要的BUFFER。
PS:BH中包含BA( BufferAddress)是塊在BUFFER CACHE中的地址,根據這個地址可以直接訪問BUFFER。
當然,到這里故事并沒有結束,如果遍歷完鏈表沒有找到BUFFER,說明塊沒有在BUFFER中,只能物理讀了。
2.??Latch:Cache Buffers Chain
Oracle機制關于訪問共享內存,需要Latch和Mutex.
搜索列表,訪問BH中的BA,都需要LATCH保護。 CacheBuffers Chian Latch檢查CBC Latch.
想訪問鏈表,必須先申請CBC LATCH,在鏈表中尋找目標BH,需要對BH修改,修改是為了加鎖(Buffer Pin鎖),加鎖完畢后CBC Latch釋放。Buffer Pin鎖保護訪問的Buffer.
CBC Latch期間主要是:搜索鏈表,查找BH,然后修改BH中的Buffer Pin鎖。
主要注意的是一個CBCLatch其實是保護好幾個Bucket的,意味著一個多個鏈表使用了同一Latch,所以這些鏈表不能再同一時間進行搜索了。Oracle這樣的目的是為了節約內存。
查看CBC Latch使用的內存量如下:
sys@PDB1> select to_number(b.addr,'xxxxxxxxxxxxxxxxxxxxx')-to_number(a.addr,'xxxxxxxxxxxxxxxxxxxxx') from(select rownum rid,addr from v$latch_children where name='cache buffers chains'order by addr) a, (select rownum rid,addr from v$latch_children wherename='cache buffers chains' order by addr) b where a.rid=b.rid+1 andrownum<=1;
TO_NUMBER(B.ADDR,'XXXXXXXXXXXXXXXXXXXXX')-TO_NUMBER(A.ADDR,'XXXXXXXXXXXXXXXXXXXXX')
-----------------------------------------------------------------------------------
192
每個CBC Latch的大小為192個字節。
釋放Buffer Pin鎖的時候,還要修改BH中的Buffer Pin鎖,同樣需要CBCLatch保護。
3.??CBC Latch競爭
l? 多個進程以不兼容模式申請某一CBC Latch,訪問此CBC Latch保護的不同鏈表和不同BH
l? 多個進程以不兼容模式申請某一CBC Latch,訪問此CBC Latch保護的同一鏈表和同一BH
熱鏈和熱塊競爭。
熱鏈競爭可以通過修改_db_block_hash_buckets和_db_block_hash_latches來控制BUCKETS 和LATCH數量,重新計算BUCKET和BH的對應關系。
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net
標簽:CBC,HASH,BUFFER,CACHE,BH,鏈表,Buffer,Oracle,Latch
來源: https://www.cnblogs.com/swncz/p/10443514.html
總結
以上是生活随笔為你收集整理的oracle buffer block,8 Oracle深度学习笔记——BUFFER CACHE深入一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看oracle版本信息,如何查看o
- 下一篇: 二战T40坦克歼击车