高水位線和全表掃瞄

2021-08-26 10:30:46 字數 1178 閱讀 7489

高水位線好比水庫中儲水的水位線,用於描述資料庫中段的擴充套件方式。高水位線對全表掃瞄方式有著至關重要的影響。當使用delete 操作

表記錄時,高水位線並不會下降,隨之導致的是全表掃瞄的實際開銷並沒有任何減少。本文給出高水位線的描述,如何降低高水位線,以及高水

位線對全表掃瞄的影響。

一、何謂高水位線

如前所述,類似於水庫中儲水的水位線。只不過在資料庫中用於描述段的擴充套件方式。

可以將資料段或索引段等想象為乙個從左到右依次排開的一系列塊。當這些塊中未填充任何資料時,高水位線位於塊的最左端(底端)

隨著記錄的不斷增加,新塊不斷地被填充並使用,高水位線隨之向右移動。高水位線之上為未格式化的資料塊。

刪除(delete)操作之後,高水位線之下的塊處於空閒狀態,但高水位線並不隨之下降,直到重建,截斷或收縮表段。

全表掃瞄會掃瞄高水位線之下的所有塊,包括空閒資料塊(執行了delete操作)。

低高水位線

是在使用assm時的乙個概念。即使用assm時除了高水位線之外,還包括乙個低高水位線。低高水位線一定是位於高水位線之下。

當段使用mssm管理方式時只有一種情況即只存在乙個高水位線。

使用mmsm時,當hwm公升高時,oracle立即格式化所有塊且有效,並可以安全讀取。僅當第一次使用時完成格式化,便於安全讀取資料。

使用assm時,當hwm公升高時,oracle並不會立即格式化所有塊。僅當第一次使用時完成格式化,便於安全讀取資料。

使用低高水位線可以減少當全面掃瞄表段時,低高水位線與高水位線之間不安全塊的檢查數量。即低高水位線之下的塊不再檢查。

二、演示高水位線與全表掃瞄

三、總結

1、高水線直接決定了全表掃瞄所需要的i/o開銷

2、delete操作不會降低高水位線,高水位線之下的所有塊依然被掃瞄

3、使用truncate 會重置高水位線到0位

4、定期使用alter table tab_name shrink space cascade 有效減少該物件上的i/o開銷

四、延伸參考

收縮表段(shrink space)

dbms_xplan之display_cursor函式的使用

dbms_xplan之display函式的使用

執行計畫中各字段各模組描述

oracle 繫結變數窺探

oracle 自適應共享游標

oracle rowid

ORACLE的高水位線

這幾天一直在看乙個問題,乙個統計程式突然統計的資料量不正常了,從頭查到尾,覺得程式和配置都沒有問題,但就是統計出的結果不對,但發現有乙個程式的入庫檔案還存留很多,推斷可能是資料還沒入庫完全,但是什麼導致的呢,以為是那部分檔案太大,入庫太慢,但後來發現還是資料庫的問題,乙個temp表查詢空表都花費很長...

oracle 高水位線詳解

一 什麼是水線 high water mark 所有的oracle段 segments,在此,為了理解方便,建議把segment作為表的乙個同義詞 都有乙個在段內容納資料的上限,我們把這個上限稱為 high water mark 或hwm。這個hwm是乙個標記,用來說明已經有多少沒有使用的資料塊分配...

高水位線 指令碼

1 create table hwm as select from dba objects 2sql select segment name,segment type,blocks from dba segments 3where segment name hwm 4 dba segments.bl...