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

來源:互聯網
上載者:User

標籤:

一.  高水位(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操作,不由應用程式完成,需要管理員定期執行。

         

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.