Oracle 检查点队列和HASH Bucket
作為磁盤數據塊的緩存,Buffer Cache在Oracle的所有內存池中是最大的。
假設進程要訪問5號數據文件中的第1234號塊,Oracle如何知道這個塊是否在Buffer Cache中?如果在,地址是多少?使用HASH算法;
在Oracle中,幾乎所有在內存中搜索數據的算法都采用HASH算法。
HASH算法中有一個重要的概念:Bucket。
Buffer Cache中的HASH Bucket數量,由_db_block_hash_buckets參數設置。
Oracle HASH表的Bucket中存放的是指向鏈表頭的指針。
Buffer Header,簡稱BH。
SGA中是公共內存,哪怕要訪問公共內存中的一個字節,都需要有某種鎖機制保護。
Oracle采用的鎖機制是Latch和Mutex。
修改塊時,Buffer中有用戶最新修改的數據,這些數據還沒有寫入磁盤,這樣的Buffer就是臟Buffer(臟塊)。
臟塊由DBWR進程統一寫磁盤。
臟塊鏈表有兩個,檢查點隊列(CKPT-Q),LRUW。
當塊變臟,Oracle會做兩件事,一是生成Redo,二是將臟塊鏈接到檢查點隊列。
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列是檢查點隊列中的臟塊數目;?
CPODS列是on disk rba的scn ;?
CPODT列是on disk rba的時間戳 ;?
CPHBT列是心跳。
?
隱藏參數 (hidden parameters) ,由oracle內部使用,以 '_' 開頭。
查看_db_block_hash_buckets的參數值;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Oracle 检查点队列和HASH Bucket的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言结构体和结构体数组示例 - Win
- 下一篇: 在一个解决方案中用C#测试调用C++ D