程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle 高水位(HWM)回收原理及操作方法,oraclehwm

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

編輯:Oracle教程

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


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

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

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

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

  

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

          

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

     

       數據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操作,不由應用程序完成,需要管理員定期執行。

           

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved