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)