oracle索引核心過程

wanglinghua0907發表於2024-01-17

索引的根塊、枝塊的查詢額度比葉塊、表塊高很多。

索引根塊、枝塊絕大多數的操作都是讀,除非發生索引分裂。


普通索引的根塊、枝塊  和  Unique索引、索引Unique掃描時索引時,索引的根塊、枝塊、葉塊、

表塊都是以CBC latch共享的模式保護。


Unique索引

如果Unique索引列使用等值條件查詢時(id是Unique索引的索引列,語句為where id=某個值),那索引的根塊、枝塊、葉塊、

表塊都共享CBC latch。

如果不是等值條件,則和非Unique索引一樣,只有根塊、枝塊是共享CBC latch,葉塊、表塊還是獨佔CBC latch。


也就是說,索引Unique掃描(INDEX UNIQUE SCAN)根塊、枝塊、葉塊、表塊都是以CBC latch共享

(例:where id=?,且id列是索引列)

用rowid直接邏輯讀表塊(TABLE ACCESS BY USER ROWID)是獨佔CBC latch。(例:where rowid='xxxxxxxxxxxx')


普通索引的根塊、枝塊

1.根據要訪問的檔案號、塊號,算出hash值

2.根據hash值找到hash bucket

3.根據每個hash bucket獨有的一個 指向CBC連結串列(cache buffers cache chains list)的連結串列頭(我願稱之為指標),

找到對應的CBC連結串列

4.從CBC連結串列的連結串列頭——CBC連結串列,中間的CBC latch鎖設成S模式(共享鎖)

5.在CBC latch鎖的保護下,搜尋連結串列

7.buffer pin鎖修改完成,釋放獨佔的CBC latch鎖。

8.查詢BH中的BA,不對buffer pin鎖狀態進行修改。

9.在共享CBC latch鎖的保護下,根據BH中的BA地址,查詢buffer中的資料

10.查詢buffer資料完畢,釋放CBC latch



本文從Oracle核心技術揭秘_呂海波中理解

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69980685/viewspace-3004171/,如需轉載,請註明出處,否則將追究法律責任。

相關文章