???高水位線好比水庫中儲水的水位線,用于描述數據庫中段的擴展方式。高水位線對全表掃描方式有著至關重要的影響。當使用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?
??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
