Oracle 检查点队列和HASH Bucket
作為磁盤數(shù)據(jù)塊的緩存,Buffer Cache在Oracle的所有內(nèi)存池中是最大的。
假設(shè)進(jìn)程要訪問5號(hào)數(shù)據(jù)文件中的第1234號(hào)塊,Oracle如何知道這個(gè)塊是否在Buffer Cache中?如果在,地址是多少?使用HASH算法;
在Oracle中,幾乎所有在內(nèi)存中搜索數(shù)據(jù)的算法都采用HASH算法。
HASH算法中有一個(gè)重要的概念:Bucket。
Buffer Cache中的HASH Bucket數(shù)量,由_db_block_hash_buckets參數(shù)設(shè)置。
Oracle HASH表的Bucket中存放的是指向鏈表頭的指針。
Buffer Header,簡(jiǎn)稱BH。
SGA中是公共內(nèi)存,哪怕要訪問公共內(nèi)存中的一個(gè)字節(jié),都需要有某種鎖機(jī)制保護(hù)。
Oracle采用的鎖機(jī)制是Latch和Mutex。
修改塊時(shí),Buffer中有用戶最新修改的數(shù)據(jù),這些數(shù)據(jù)還沒有寫入磁盤,這樣的Buffer就是臟Buffer(臟塊)。
臟塊由DBWR進(jìn)程統(tǒng)一寫磁盤。
臟塊鏈表有兩個(gè),檢查點(diǎn)隊(duì)列(CKPT-Q),LRUW。
當(dāng)塊變臟,Oracle會(huì)做兩件事,一是生成Redo,二是將臟塊鏈接到檢查點(diǎn)隊(duì)列。
select CPDRT,CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "Low RBA", CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "On disk RBA",CPODS,CPODT,CPHBT from x$kcccp;SELECT ksppinm, ksppstvl, ksppdescFROM x$ksppi x, x$ksppcv yWHERE x.indx = y.indxAND ksppinm = '_db_block_hash_buckets';CPDRT列是檢查點(diǎn)隊(duì)列中的臟塊數(shù)目;?
CPODS列是on disk rba的scn ;?
CPODT列是on disk rba的時(shí)間戳 ;?
CPHBT列是心跳。
?
隱藏參數(shù) (hidden parameters) ,由oracle內(nèi)部使用,以 '_' 開頭。
查看_db_block_hash_buckets的參數(shù)值;
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Oracle 检查点队列和HASH Bucket的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言结构体和结构体数组示例 - Win
- 下一篇: 各种Oracle常见操作