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

来源:http://www.cnblogs.com/ZiyuanZhu/archive/2016/10/10/5923620.html
-Advertisement-
Play Games

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


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

           
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.Android Studio 將module編譯打包成aar文件,module依賴的 (例如 )不會被打包進入aar文件,應用引入該aar文件(無論是本地引入,還是網路庫引入)時,都還需要在應用(app)module的依賴中填加aar module的依賴。否則應用運行時會crash。 因此,開發 ...
  • Android Weekly中文筆記, Issue #225. 本期內容包括: Android 7.0的Quick Settings; Firebase; 相容舊版本的shared element transition; Wear; ORM: 用ActiveAndroid做資料庫存儲; 崩潰報告工具... ...
  • 在之前的文章中,我們將用戶的密碼使用SharedPreferences存儲,我們打開/data/data/com.wuyudong.mobilesafe/shared_prefs文件夾下的 config.xml 文件,導入到本地,查看內容: 密碼居然使用的是明文,這樣是非常不安全的。這裡採用md5加 ...
  • 做App測試時監測使用期間的cpu,記憶體,流量,電量等指標時,發現的企鵝很好用的工具。 備份至此,方便後期查閱 轉載自CSDN的文章:【騰訊開源】Android性能測試工具APT使用指南 原文URL http://www.csdn.net/article/2014-04-23/2819366-ten ...
  • android去掉滑動到頂部和底部的陰影 解釋一下listview用到的各個屬性 去除拖動時預設的帶顏色的背景: android:cacheColorHint="#00000000" 去除ListView滑到頂部和底部時邊緣的黑色陰影: android:fadingEdge="none" 去除下滑到 ...
  • 本文接著實現“確認密碼”功能,也即是用戶以前設置過密碼,現在只需要輸入確認密碼 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,轉載請註明出處。 佈局文件和《Android 手機衛士--設置密碼對話框》中的佈局基本類似,所有copy一下,修改一 ...
  • 本文章向大家介紹phpmyadmin #2003 無法登錄 MySQL伺服器的解決方法,需要的碼農可以參考一下。 通過phpmyadmin連接mysql資料庫時提示:“2003 無法登錄 MySQL伺服器”。。。很明顯這是沒有啟動mysql服務,右擊我的電腦-管理-找到服務,找到mysql啟動一下, ...
  • 背景 背景 我們知道Azure Sql Database 可以降低運維成本、是一種Pass模式,有資源彈性設置,可以自由調整資源自動對應不同業務高峰(當然也可以降低費用成本),也方便項目後期的資源擴展,以及一些其他優點或特性,這就不一一列出。那麼資料庫開發工程師來說,操作Azure Sql Data ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...