查詢資料時,segment header被訪問的次數
在管理版上這樣的說法:
如果是全表掃描,讀取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倍,再次測試結果也是一樣的,都只增加一次。
如果是全表掃描,讀取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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於快取與資料查詢次數的問題快取
- 記一次資料庫查詢超時優化問題資料庫優化
- 大資料的實時查詢大資料
- 查詢user使用那些roll segment以及等待roll segment
- Prometheus時序資料庫-資料的查詢Prometheus資料庫
- 檢視慢查詢中,表被update 或 select 次數
- 指定時間內網站訪問次數的監控內網網站
- 資料庫新開賬號,並授予了相應表的查詢許可權。訪問時,其他PC端遠端被拒絕資料庫
- 字串查詢之字元次數字串字元
- 高效的SQL語句有助於減少資料庫的訪問次數SQL資料庫
- 資料庫資料的查詢----連線查詢資料庫
- v$datafile&v$datafile_header,oracle 備份恢復時,查詢資料檔案資訊HeaderOracle
- SQL資料庫查詢最佳化技巧提升網站訪問速度的方法SQL資料庫網站
- 海量資料的查詢快取問題快取
- mysql查詢最近時間的一組資料MySql
- 關於Oracle資料庫的時間查詢Oracle資料庫
- 查詢某時間段的統計資料
- 資料庫開發基礎--層次查詢+資料庫
- 資料庫開發基礎---層次查詢資料庫
- oracle資料庫sql查詢檢視第二次查詢很慢Oracle資料庫SQL
- 海量資料查詢問題--簡單的理解
- 併發查詢資料庫問題資料庫
- MySQL中用通用查詢日誌找出查詢次數最多的語句的教程MySql
- 查詢sql語句執行次數SQL
- 前15天查詢次數曲線
- 臨時表空間被佔滿的原因查詢
- 一次奇怪的StackOverflowError問題查詢之旅Error
- 一次效能問題原因查詢
- 記一次 Golang 資料庫查詢元件的優化。Golang資料庫元件優化
- 查詢出資料庫中預設會以全表掃描方式訪問的表資料庫
- RAC:在子查詢使用gv$檢視,有時查詢不出資料
- 回閃查詢查詢刪除的資料
- Flask——資料的查詢Flask
- sqlserver查詢資料的所有表名和行數SQLServer
- 蘋果“查詢”功能竟能被用來傳輸任意資料?!蘋果
- 優化訪問相關 datetime 列的查詢優化
- JDBC用ResultSet訪問大量資料時會遇到的問題JDBC
- MyBatis 查詢資料時屬性中多對一的問題(多條資料對應一條資料)MyBatis