Oracle降低HWM的集中方法

2021-08-31 04:39:24 字數 2674 閱讀 7909

轉[url]

high water mark (hwm)指的是當我們建立乙個segment的時候,在segment內的乙個指標,界定了segment 內曾經配置過的block水位。

剛建立segment時尚未insert資料,hwm通常在segment header附近,當你不斷地insert資料使用了更多的block之後,hwm自然會跟著移動。但是日後你delete資料後,雖然實際儲存資料的 block已經減少,但是hwm仍然不會改變,這就像水庫的水位曾經滿到某個刻度而留下一道水痕,雖然水位下降了但是仍然清晰可見那道高水位。

hwm之下如果存在太多空的block,最大的缺點就是當發生full table scan (fts)的時候,會造成過多無謂的io,因為fts會讀取segment內的block直到hwm為止,如此也會造成buffer pool的使用效率不佳。

hwm是oracle中block有沒有使用的分界線,它會隨著資料的insert而上公升,但它並不會隨資料的delete而下降,因此全表掃瞄的時間並不因資料的delete而減少,相反可能由於塊清除反而全表掃瞄時間增加,可以用下面方法的任一一種來降低hwm:

[size=large][b]第一種:shrink[/b][/size]

適用於10g以後的版本,前提是這個表,索引,物化檢視或物化檢視log所在表空間segment的管理是auto的,並且表已enable row movement,如:

[quote]sql> select owner,segment_name,bytes,blocks,extents from dba_segments

where segment_name = 'emp';

sql> alter table emp enable row movement;

sql> alter table emp shrink space;

sql> select owner,segment_name,bytes,blocks,extents from dba_segments

where segment_name = 'emp';[/quote]

第二種:online redefinition

online redefinition在oracle 9i引用,10g對dbms_redefinition包做了一些調整,使用的操作起來理簡單,如新增加的copy_table_dependents,unregister_dependent_object,方法如下:

1.呼叫dbms_redefinition.can_redef_table procedure確認是否可以online redefinition

sql> execute dbms_redefinition.can_redef_table ('finance', 'accts_payable');

2.在redefinition schema下建立interim table

3.如果redefinition乙個大表,可以用下面的statement來改善效能:

sql> alter session force parallel dml parallel degree-of-parallelism;

sql> alter session force parallel query parallel degree-of-parallelism;

4.呼叫dbms_redefinition.start_redef_table procedure開如redefinition

sql> dbms_redefinition.start_redef_table('finance', 'accts_payable','accts_payable_stage');

5.建立dependent objects on interim table

有兩種方法:

呼叫dbms_redefinition.copy_table_dependents自動建立dependent objects;

使用create statement手動建立dependent objects,手動建立的dependents需要呼叫register_dependent_object註冊

6.更新在redefinition過程中的更新到interim表

7.呼叫dbms_redefinition.finish_redef_table完成redefinition

8.刪除收回空間如interim table使用的表

注:使用online redefinition需要額外的空間

第三種:alter table … move

在move時可以使用當前表空間也可以指定其他表空間,如:

sql> alter table emp move; --使用當前表空間

sql> alter table emp move tablespace tbs_emp; --把錶移動到tbs_emp表空間上

在move的過程會鎖表,類似下的語句是不能執行:

select rownum from emp where rownum=1 for update nowait;

使用move降低hwm也需要額外表的空間.

第四種:expdp/impdp或exp/imp + truncate

上面這兩種方法在此就不作說明了.

總結:shrink和online redefinition是首選擇方法,其他方法在降低hwm時會有較長的時間表不能訪問(鎖表或直接不能訪問),另外表後面的四種方法都可以改變表的表空間,online redefinition可以將普通表轉換為分割槽表.

oracle的高水位線 HWM

hwm的一些特性 1 oracle用hwm來界定乙個段中使用的塊和未使用的塊。當我們建立乙個表 a時,oracle就會為這個物件分配乙個段.在這個段中,即使我們未插入任何記錄,也至少有乙個區 64bit,也就是8個塊 被分配,第乙個區的第乙個塊就稱為段頭 segment heade 段頭中就儲存了一...

報錯之後,彈窗的集中方式

顯示對話方塊 param modaldivid param title param content param type 1僅關閉按鈕 預設 2顯示是否按鈕 param yesscript 選擇 是 按鈕需要執行的js指令碼 iframelayer 用於解決div被activex遮擋的情況 them...

IOS 預覽word文件的集中方式

在iphone中可以很方便的預覽文件檔案,如 pdf word等等,這篇文章將以pdf為例。介紹三種預覽pdf的方式,又分別從本地pdf文件和網路上的pdf文件進行對比。預覽本地pdf文件 1 使用uiwebview控制項 uiwebview是iphone開發中最常用的控制項之一,類似.net中的w...