Oracle 高水位(HWM)回收原理及操作方法

Oracle 高水位(HWM)回收原理及操作方法

一.  高水位(HWM)及其產生原因

       High Water Mark,HWM) 是Oracle(Segment)級別的概念。在僅有DML(比如delete,insert)操作時,高水位線只會增長,不會降低。具體來說,由於程序使用的delete語句不回收使用過的空間,數據雖然刪除了,但是高水位線卻沒有降低,仍然處於之前的水位。

         下圖爲一個Segment內高水位不斷增長的示意圖:

          注:一個表在初次插入記錄時,Oracle會爲其分配Segment和block。

  

         插入大量數據後,高水位線隨之增長

          

         當數據被刪除(Delete)後,高水位線並未下降

     

       數據block       已分配的block      未分配block

圖1. 段(Segment) 內數據塊(block)使用示意圖

二.  回收操作的目

        1. 降低Oracle數據庫中某些段(Segment)的高水位線,減少使用空間,從而避免不必要的表空間文件膨脹。在此稍作解釋:

            如上一節所述,隨着高水位線的增長,表空間文件中的used space部分會逐漸增大,當所有的free  space均被使用後,表空間文件的大小會在操作系統級別增大,直到達到最大可擴展大小。如下圖所示:

        2. 提高表的掃描效率:由於Oracle的select語句會掃描高水位線以下的所有block,已分配而無數據的block過多時,必然會影響語句的執行效率。而降低高水位能提高這一效率。

三.  回收高水位的方法和操作步驟

                在查詢過參考資料、諮詢過相關專家、並且在測試系統充分測試後,在期權生產系統中對當前表空間的一些表進行了高水位回收。擇一例並附步驟解釋如下:

        操作對象選擇當前數據表空間TX_DATA_TBS中的BK_OPT_CUST_HOLD_DETAIL表。

        此操作在關閉應用程序後執行,並在執行後重新開啓程序。

        步驟主要分爲三個:

                       1.    操作前狀態檢查,供操作後比對;

                       2.    高水位回收操作;

                       3.    操作後狀態檢查,與操作前狀態比對。

         以下爲詳細步驟,關鍵查詢結果用不同顏色標註。

          1.操作前狀態檢查

           -- 查看各表空間的空餘空間(free space),此時TX_DATA_TBS表空間空餘部分(free space)爲721MB。

-- 查看錶空間文件狀態,可見TX_DATA_TBS表空間文件當前大小爲9900 MB。

-- 查看待回收的表狀態。 -- 查詢表BK_OPT_CUST_HOLD_DETAIL記錄數。

-- 查詢BK_OPT_CUST_HOLD_DETAIL表上的索引狀態。

-- 分析BK_OPT_CUST_HOLD_DETAIL表的狀態。

-- 查詢BK_OPT_CUST_HOLD_DETAIL表的高水位狀態。可知回收前該表所在段共佔用122234個block。

-- 查詢該表所在段佔用磁盤大小。目前該表所在段共佔用955MB。

2.高水位回收操作 -- 由於shrink space操作需要使用“行移動”功能,需要在操作前開啓該功能。

-- 收縮表,回收高水位。

-- 關閉“行移動”功能。

3.操作前狀態檢查 -- 查詢表記錄數、索引情況。與操作前比對,未發生改變。

-- 再次分析BK_OPT_CUST_HOLD_DETAIL表的狀態。

-- 再次查詢BK_OPT_CUST_HOLD_DETAIL表的高水位狀態。可知回收後該表所在段共佔用599 個block,回收122234-599 = 121635個block。

-- 再次查詢該表所在段佔用磁盤大小。回收後該表所在段共佔用4.875 MB,回收950MB。

 

-- 再次查詢表空間使用情況。與回收前對比,表空間空餘空間上漲1671-721 = 950 MB,與表回收空間相同。

-- 但是表空間文件大小仍爲9900 MB。可見shrink space操作僅作用於數據段Segment,而對錶空間文件級別的大小並無影響。如要改變表空間文件大小,需要另外使用表空間級別的resize操作。 用下圖可簡單解釋回收前後表空間內部空間的變化。

 

四.  小結 

1.回收高水位操作shrink space可對高水位之下未儲存數據的block加以回收,並降低高水位線。既能減少空間使用,又能提高查詢效率,而對錶內的數據、表上的索引沒有影響。

2.回收高水位操作shrink space是表和段級別的操作,能釋放表空間文件內的空間,但不能縮小表空間文件的大小。

3.回收操作是DDL操作而非DML操作,不由應用程序完成,需要管理員定期執行。

 
       
 
posted @ 2016-10-10 10:34 Ziyuan.Zhu 閱讀(...) 評論(...) 編輯 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章