1. 程式人生 > >Oracle中,如何確定熱快是資料塊還是索引塊?

Oracle中,如何確定熱快是資料塊還是索引塊?

每一個數據塊在被讀入buffer cache時,都會先在buffer cache中構造一個buffer header,buffer header與資料塊一一對應
每個buffer header在x$bh中都存在一條記錄
buffer header中儲存
1) 該資料塊在buffer cache中實際的記憶體地址。
2) 該資料塊的型別,包括data、segment header、undo header、undo block等等。
3) 該buffer header所在的hash chain,是通過在buffer header裡儲存指向前一個buffer header的指標和指向後一個buffer header的指標的方式實現的。

4) 該buffer header所在的LRU、LRUW、CKPTQ等連結串列(這些連結串列我們後面都會詳細說明)。也是通過記錄前後buffer header指標的方式實現。
5) 當前該buffer header所對應的資料塊的狀態以及標記。
6) 該buffer header被訪問(touch)的次數。
7) 正在等待該buffer header的程序列表(waiter list)和正在使用該buffer header的程序列表(user list)。

根據這些資訊,結合dba_extents檢視,可以很容易地找到每個buffer對應的物件資訊
SQL> desc x$bh
TS#                                                NUMBER–tablespace number表空間號

FILE#                                              NUMBER–塊在資料庫內絕對檔案號
DBARFIL                                            NUMBER–塊的相對檔案號
DBABLK                                             NUMBER –塊號–在資料檔案上的
有了這些資訊 就可以知道是什麼了 dump出也可以進行更深入折研究