查詢資料時,segment header被訪問的次數

kewin發表於2009-10-15
在管理版上這樣的說法:

如果是全表掃描,讀取segment header之後會通過extent鏈的方式讀下去,即使你drop掉表,由於物理塊還是存在的所以不會出問題。
但是oracle每讀10個extent會需要重新讀取header一次,那麼這個時候如果表不存在的話,會發現在資料字典裡面已經不存在了,那麼就會報表找不到。
和螢幕輸出什麼的沒什麼關係。。。

原文: http://www.itpub.net/viewthread. ... p;extra=&page=3

不太認同這樣的說法,做了測試,如不對,歡迎大家指出:
測試環境: LINUX 4.6 + ORACLE 10.2.0.4
物件T1 的SEGEMNT 的資訊:
SEGMENT_NAME                                                                         FILE_ID   BLOCK_ID
--------------------------------------------------------------------------------- ---------- ----------
T1                                                                                         1      55921
T1                                                                                         1      55929
T1                                                                                         1      55937
T1                                                                                         1      55945
T1                                                                                         1      55953
T1                                                                                         1      55961
T1                                                                                         1      55969
T1                                                                                         1      55977
T1                                                                                         1      55985
T1                                                                                         1      55993
可以看到SEGMENT HEADER 的BLOCK NUMBER為55921。
物件號為:17890, 所在的FILE NUMNER 為1。有80個BLOCK。
查詢header被touch的次數:
select ADDR , FILE#, DBABLK   ,STATE ,  TCH  from x$bh where file#=1 and  OBJ=17890 and DBABLK=55921
在對TABLE做查詢前先做查詢,看SEGMENT HEADER 被訪問的次數:
0000002A97A6D430          1      55921          1          8

進行查詢:
SQL> select count(*) from t1;

  COUNT(*)
----------
      5790
再次檢視SEGMENT HEADER被touch的次數:
SQL> /

ADDR                  FILE#     DBABLK      STATE        TCH
---------------- ---------- ---------- ---------- ----------
0000002A97A6D430          1      55921          1          9

看到touch次數只增加了1次,不是按照設想的增加為8+80/10=16次。

進行多次測試,結果都是一樣的,都只增加一次。
將資料量變大為原先的4倍,再次測試結果也是一樣的,都只增加一次。

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

相關文章