Oracle中的HWM

    1.什麼是高水位線(High Water Mark)
數據庫

        對於一個段(邏輯上其實能夠說一個表),有一個段裏容納數據的上限,這個上限就是高水位線。一般這個HWM只會增長不會減小,由於它記錄的是存儲數據最多時刻的上限。
spa

    2.它的影響
orm

        在數據庫表剛創建的時候,因爲沒有任何數據,因此這個時候水位線是空的,也就是說HWM爲最低值。當插入了數據之後,高水位線就會上漲,可是這裏也有一個特性,就是若是你採用delete語句刪除數據的話,數據雖然被刪除了,可是高水位線卻沒有下降,仍是你剛纔刪除數據之前那麼高的水位。也就是說,這條高水位線在平常的增刪操做中只會上漲,不會下跌。it

        當咱們select的時候,Oracle是根據HWM來肯定所要掃描的數據塊的個數的。也正是由於這個特性,因此即便這個HWM下有許多空的數據塊,也同樣是要掃描的,這也就是爲何有些人表裏沒什麼數據,可是查詢時間依然長的緣由。所以,若是咱們要刪除這個表的所有數據,應當使用turncate語句刪除表中數據,這樣這個段的HWM會重置爲0。
table

    3.查詢這個段的高水位線
sed

        那麼如何查詢這個HWM呢。select

a)分析這個表:ANALYZE TABLE <tablename> ESTIMATE/COMPUTE STATISTICS.數據

b) 查詢:  SELECT blocks, empty_blocks, num_rows查詢

    FROM user_tablesmargin

    WHERE table_name = <tablename>;

        這裏的blocks正是曾經使用過的塊數目。

    4.修正這個HWM

        要想修正這個HWM,若是數據都不要了,直接turancate,若數據須要,能夠經過重建表再插入的方式。

        好比複試數據到臨時表,而後drop原表,在rename臨時表或者alter table table_name deallocate unused(彷佛要考慮到extent)

相關文章
相關標籤/搜索