1. 程式人生 > 資料庫 >oracle核心原理-讀取buffer解析

oracle核心原理-讀取buffer解析

1 搜尋buffer過程如下:

  1. 根據要訪問的檔案號,塊號,計算hash值。
  2. 根據hash值,找到對應的bucket。
  3. 搜尋(在CBC的保護下) bucket的連結串列,查詢哪個 BH為目標BH.
  4. 找到對應的BH,開始修改buffer pin鎖,完成後釋放CBC。
  5. 在buffer pin鎖保護下,讀取BA。
  6. 按照BA訪問buffer

以上為oracle邏輯讀過程,如果未找到,則需要發生物理讀取。

2  持有CBC完成工作

  1. 搜尋連結串列,查詢目標BH。
  2. 修改BH中buffer pin鎖狀態,
  3. 釋放cbc,在buffer pin保護下訪問buffer
  4. cbc的主要核心作用為保護連結串列和保護BH,

buffer pin鎖有多重模式,共享(S),獨佔(X),沒加鎖則為0。

如果只是邏輯讀,則修改buffer pin為S模式,如果是DML則需要修改為X模式。

3 一個邏輯度過程

  1. 全表掃描讀取extent map或者索引掃描(讀取段頭+1=根塊,枝塊,葉塊讀取rowid)得到file#和block#。
  2. 根據file#和block#進行hash運算,得到對應的bucket。
  3. 獲取cbc,檢索hash 連結串列,搜尋資料塊,查到後,修改對應bh的buffer pin狀態,從0-S或者從0-X,
  4. 釋放cbc,在buffer pin鎖保護下,根據BH中對應的BA讀取buffer內容。
  5. 讀取完buffer後,獲取cbc,將buffer pin狀態恢復到0.
  6. 釋放CBC。
  7. 如果對應的BH未找到,則進行物理讀取。物理讀取對應的buffer狀態為read。