實用技巧:Oracle中精準查看表占用空間大小

目錄

  • 實用技巧:Oracle中精準查看表占用空間大小
    • 一、為什么需要精準統計表空間占用?
    • 二、完整查詢SQL:覆蓋表、LOB、索引
    • 三、SQL語句關鍵邏輯解析
      • 1. 基礎表:dba_tables 與 dba_tablespaces
      • 2. 子查詢1:統計表段空間(tab_seg)
      • 3. 子查詢2:統計LOB段空間(lob_seg)
      • 4. 子查詢3:統計索引段空間(idx_seg)
      • 5. 關鍵函數說明
    • 四、使用場景與優化建議
      • 1. 常見使用場景
      • 2. 性能優化建議
    • 五、查詢結果解讀示例
    • 六、總結

實用技巧:Oracle中精準查看表占用空間大小

在Oracle數據庫日常運維中,準確掌握表的空間占用情況是至關重要的工作。無論是進行存儲容量規劃、排查性能瓶頸,還是清理冗余數據,都需要先清晰了解表本身、LOB字段及關聯索引的空間消耗。本文介紹一個完整的SQL查詢方案,幫助你全面統計表的空間占用,并深入解析查詢邏輯與優化思路。

一、為什么需要精準統計表空間占用?

在實際運維場景中,我們常遇到這些需求:

  • 識別“空間大戶”表,避免表體積過大導致查詢性能下降;
  • 規劃表空間擴容,防止因空間不足引發業務中斷;
  • 分析LOB字段(如大文本、圖片數據)的空間消耗,優化存儲策略;
  • 核查索引空間占比,判斷是否存在冗余索引浪費存儲。

常規的dba_tables視圖僅能提供表的基礎信息,無法完整覆蓋表段、LOB段和索引段的空間數據。因此,我們需要通過多表關聯查詢,整合多維度的空間信息,才能得到全面的統計結果。

二、完整查詢SQL:覆蓋表、LOB、索引

以下SQL語句可完整統計表的所有者、表名、所屬表空間,以及表本身、LOB字段、索引的空間占用(單位統一為GB,保留2位小數),并按總空間占用降序排列,方便快速定位“空間大戶”。

SELECT t.owner AS "表所有者",                  -- 表的所屬用戶t.table_name AS "表名",                 -- 表的名稱t.TABLESPACE_NAME AS "表默認表空間",    -- 表創建時指定的默認表空間-- 表段空間:表本身存儲數據占用的空間(單位:GB)ROUND(tab_seg.bytes / 1024 / 1024 / 1024, 2) AS "表空間(GB)",tab_seg.TS AS "表實際表空間",           -- 表段實際分布的表空間-- LOB段空間:存儲LOB類型字段(如CLOB、BLOB)占用的空間(單位:GB)ROUND(lob_seg.bytes / 1024 / 1024 / 1024, 2) AS "LOB空間(GB)",lob_seg.TS AS "LOB實際表空間",          -- LOB段實際分布的表空間-- 總空間:表段 + LOB段的總空間(單位:GB)ROUND((NVL(tab_seg.bytes, 0) + NVL(lob_seg.bytes, 0)) / 1024 / 1024 / 1024, 2) AS "總空間(GB)",-- 索引空間:所有關聯索引(含LOB索引)占用的空間(單位:GB)ROUND(idx_seg.bytes / 1024 / 1024 / 1024, 2) AS "索引空間(GB)",idx_seg.TS AS "索引實際表空間"          -- 索引段實際分布的表空間
FROM dba_tables t
-- 關聯dba_tablespaces獲取表空間基礎信息
JOIN dba_tablespaces ts ON t.tablespace_name = ts.tablespace_name
-- 子查詢1:統計表段(TABLE類型)的空間占用,支持表分區(多表空間分布)
LEFT JOIN (SELECT owner, segment_name, SUM(bytes) AS bytes,  -- 匯總同一表在多個表空間的總字節數to_char(wm_concat(distinct s.tablespace_name)) TS  -- 合并多表空間名稱(逗號分隔)FROM dba_segments sWHERE s.segment_type = 'TABLE'  -- 僅篩選“表”類型的段GROUP BY owner, segment_name
) tab_seg ON t.owner = tab_seg.owner AND t.table_name = tab_seg.segment_name
-- 子查詢2:統計LOB段(LOBSEGMENT類型)的空間占用
LEFT JOIN (SELECT l.owner, l.table_name, SUM(s.bytes) AS bytes,  -- 匯總同一表的所有LOB字段空間to_char(wm_concat(distinct s.tablespace_name)) TS  -- 合并LOB段的多表空間名稱FROM dba_lobs l-- 關聯dba_segments獲取LOB段的字節數JOIN dba_segments s ON l.owner = s.owner AND l.segment_name = s.segment_nameWHERE s.segment_type LIKE 'LOBSEGMENT'  -- 僅篩選“LOB段”類型GROUP BY l.owner, l.table_name
) lob_seg ON t.owner = lob_seg.owner AND t.table_name = lob_seg.table_name
-- 子查詢3:統計索引段(含普通索引、LOB索引)的空間占用
LEFT JOIN (SELECT i.table_owner,  -- 索引所屬表的所有者(與dba_tables的owner對應)i.table_name,   -- 索引關聯的表名SUM(s.bytes) AS bytes,  -- 匯總同一表的所有索引空間to_char(wm_concat(distinct s.tablespace_name)) TS  -- 合并索引段的多表空間名稱FROM dba_indexes i-- 關聯dba_segments獲取索引段的字節數JOIN dba_segments s ON i.owner = s.owner AND i.index_name = s.segment_nameWHERE -- 篩選普通索引段(含分區、子分區)s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')-- 同時篩選LOB索引段(LOB字段默認生成的索引)OR s.segment_type IN ('LOBINDEX', 'LOBINDEX PARTITION', 'LOBINDEX SUBPARTITION')GROUP BY i.table_owner, i.table_name
) idx_seg ON t.owner = idx_seg.table_owner AND t.table_name = idx_seg.table_name
WHERE 1=1-- 可選過濾條件:按表空間篩選(如僅查看TS_TEST表空間的表)-- AND t.tablespace_name = 'TS_TEST'-- 可選過濾條件:按表所有者篩選(如僅查看SCOTT用戶的表)-- AND t.owner = 'SCOTT'
-- 按總空間降序排列,NULL值排在最后(避免無數據的表排在前面)
ORDER BY "總空間(GB)" DESC NULLS LAST;

三、SQL語句關鍵邏輯解析

1. 基礎表:dba_tables 與 dba_tablespaces

  • dba_tables:存儲所有表的基礎元數據(如所有者、表名、默認表空間),是整個查詢的“主表”;
  • dba_tablespaces:存儲表空間的配置信息(如表空間類型、狀態),此處關聯用于補充表空間屬性(若無需可省略JOIN dba_tablespaces)。

2. 子查詢1:統計表段空間(tab_seg)

  • 依賴dba_segments視圖:該視圖記錄Oracle中所有“段”(表、索引、LOB等)的空間占用;
  • 篩選條件segment_type = 'TABLE':僅保留“表”類型的段,排除索引、LOB等其他類型;
  • wm_concat(distinct s.tablespace_name):若表使用了分區且分布在多個表空間,該函數會將表空間名用逗號合并(如“TS1,TS2”),避免多表空間導致的重復行。

3. 子查詢2:統計LOB段空間(lob_seg)

  • 依賴dba_lobs視圖:存儲LOB字段的元數據(如LOB字段所屬表、LOB段名稱);
  • 關聯dba_segments:通過l.segment_name = s.segment_name匹配LOB段的空間數據;
  • 篩選條件segment_type LIKE 'LOBSEGMENT':僅保留“LOB段”(LOB字段的實際數據存儲段),排除LOB索引段。

4. 子查詢3:統計索引段空間(idx_seg)

  • 依賴dba_indexes視圖:存儲所有索引的元數據(如索引關聯的表、索引所有者);
  • 篩選條件覆蓋兩類索引:
    • 普通索引:INDEXINDEX PARTITION(分區索引)等;
    • LOB索引:LOBINDEX(LOB字段默認生成的索引,用于定位LOB數據);
  • table_ownertable_name分組:確保同一表的所有索引空間被匯總。

5. 關鍵函數說明

  • ROUND(..., 2):將字節數轉換為GB后保留2位小數,結果更易讀;
  • NVL(tab_seg.bytes, 0):處理NULL值(如某些表無LOB段時,lob_seg.bytes為NULL),避免NULL + 數值結果為NULL;
  • wm_concat(distinct ...):合并多表空間名稱并去除重復值。

四、使用場景與優化建議

1. 常見使用場景

  • 場景1:全局空間排查:直接執行SQL,按“總空間(GB)”降序查看所有表的空間占用,快速定位“空間大戶”;
  • 場景2:指定表空間排查:添加AND t.tablespace_name = '目標表空間',僅統計某一表空間的表(如排查“TS_TEST”表空間的空間使用);
  • 場景3:指定用戶排查:添加AND t.owner = '目標用戶',僅統計某一用戶的表(如排查“SCOTT”用戶的表空間占用)。

2. 性能優化建議

  • 若數據庫表數量極多(如數萬張表),查詢可能較慢,可添加OWNERTABLESPACE_NAME過濾條件,減少數據掃描范圍;
  • dba_segmentsdba_tables等視圖屬于數據字典視圖,查詢時不會鎖表,但建議在業務低峰期執行(避免對字典表的頻繁訪問影響業務);

五、查詢結果解讀示例

假設執行SQL后得到如下結果,我們可以快速獲取關鍵信息:

表所有者表名表默認表空間表空間(GB)表實際表空間LOB空間(GB)LOB實際表空間總空間(GB)索引空間(GB)索引實際表空間
SCOTTORDER_INFOTS_IMMP2.56TS_IMMP18.23TS_LOB20.791.21TS_INDEX
SCOTTUSER_INFOTS_IMMP1.89TS_IMMP0.00NULL1.890.56TS_INDEX

從結果可解讀:

  • ORDER_INFO表是空間占用主力(總20.79GB),其中LOB字段占18.23GB(需重點核查LOB字段是否存儲了冗余大文件);
  • USER_INFO表無LOB字段(LOB空間為0),總空間1.89GB,索引空間0.56GB(索引占比合理,無明顯冗余);
  • 表與索引分別存儲在TS_IMMPTS_INDEX表空間(符合“表、索引分離存儲”的最佳實踐,可減少I/O競爭)。

六、總結

該SQL方案可全面覆蓋Oracle表的空間占用統計需求,不僅包含表本身的空間,還兼顧了LOB字段和索引的空間消耗,解決了常規查詢“統計不完整”的問題。通過理解各子查詢的邏輯的,你可以根據實際需求靈活調整過濾條件,進一步優化查詢效率。

定期執行該查詢,可幫助你及時發現空間異常,提前規劃存儲資源,保障數據庫的穩定運行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93497.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

openEuler等Linux系統中如何復制移動硬盤的數據

在 openEuler 系統中,提示 “You should mount volume first” ,意思是需要先掛載移動硬盤的分區才能訪問: 安裝必要軟件(針對特殊文件系統) 如果移動硬盤是 NTFS 等非 Linux 原生支持的文件系統格式,需要安裝對應的支持軟件,以掛載 NTFS 格式移動硬盤為例,需要安裝 …

java如何把字符串數字轉換成數字類型

在Java中將字符串數字轉換為數字類型有多種方法,以下是詳細說明和示例代碼: 一、基礎轉換方法 Integer.parseInt() String str "123"; int num Integer.parseInt(str); // 轉換為intDouble.parseDouble() String str "3.14"; dou…

WPFC#超市管理系統(6)訂單詳情、顧客注冊、商品銷售排行查詢和庫存提示、LiveChat報表

WPF&C#超市管理系統10. 訂單詳情10.1 頁面布局10.2 功能實現11. 顧客注冊12. 商品銷售排行查詢與庫存提示14. LiveChart報表總結10. 訂單詳情 10.1 頁面布局 頁面分三行布置,第一行復用OutstorageView界面的第一行,將屬性和命令修改為顧客相關第二…

【Linux】文件基礎IO

1.關于文件的共識原理 1.文件內容屬性 2.文件分為打開的文件和沒打開的文件 3.打開的文件: 文件被打開必須先被加載到內存,所以本質是研究進程和文件的關系,一個進程可以打開多個文件。操作系統內部一定存在大量被打開的文件,要進…

基于微信小程序的生態農產銷售管理的設計與實現/基于C#的生態農產銷售系統的設計與實現、基于asp.net的農產銷售系統的設計與實現

基于微信小程序的生態農產銷售管理的設計與實現/基于C#的生態農產銷售系統的設計與實現、基于asp.net的農產銷售系統的設計與實現

Java研學-SpringCloud(五)

一 Nacos 配置中心 1 引入依賴 – services.pom每個微服務都需要<!--配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>2 配置文件 –…

.NET 中的延遲初始化:Lazy<T> 與LazyInitializer

標簽&#xff1a;線程安全、延遲初始化、按需初始化、提升啟動性能 項目地址&#xff1a;NitasDemo/12Lazy/LazyDemo at main Nita121388/NitasDemo 目錄Lazy<T>1. 概念2. 基本用法 3. 異常處理 4. 線程安全模式 5. 示例1. 線程安全模式 (ExecutionAndPublication)2. 發…

【LLIE專題】LLIE低照度圖像結構先驗提取方法

Zero-Shot Day-Night Domain Adaptation with a Physics Prior&#xff08;ICCV,2021&#xff09;專題介紹一、研究背景二、方法1. 物理反射模型與顏色不變特征的推導&#xff08;原理推導、物理依據&#xff09;2. 顏色不變特征的計算&#xff08;特征計算公式整個過程&#x…

Font Awesome Kit 使用詳解

在現代網頁設計中&#xff0c;圖標是提升用戶體驗的關鍵元素。而 Font Awesome 作為最受歡迎的圖標庫&#xff0c;其最新版本 Font Awesome 7 通過 Kit 功能提供了更便捷高效的集成方式。本文將帶你全面了解如何使用 Font Awesome Kit&#xff0c;讓你的網站圖標管理變得輕松高…

第七十八章:AI的“智能美食家”:輸出圖像風格偏移的定位方法——從“濾鏡病”到“大師風范”!

AI圖像風格偏移前言&#xff1a;AI的“火眼金睛”——輸出圖像風格偏移的定位方法&#xff01;第一章&#xff1a;痛點直擊——“畫風跑偏”&#xff1f;AI生成藝術的“審美危機”&#xff01;第二章&#xff1a;探秘“畫風密碼”&#xff1a;什么是風格偏移&#xff1f;它藏在…

Android原生(Kotlin)與Flutter混合開發 - 設備控制與狀態同步解決方案

Kotlin 原生實現 (Android) 1.1 AndroidManifest.xml <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.afloia.smartconnect"><applicationandroid:name".MainApplication"android:label"Smart …

已開源:Highcharts.NET,Highcharts Android,與Highcharts iOS集成

近期了解到&#xff0c;Highcharts官方宣布將Highcharts.NET&#xff0c;Highcharts Android&#xff0c;與Highcharts iOS集成轉換為開源。對于Highcharts提供世界一流的數據可視化工具&#xff0c;一直致力于將資源集中在可以為您提供最大價值的地方。官方提到&#xff1a;這…

KingbaseES:一體化架構與多層防護,支撐業務的持續穩定運行與擴展

聲明&#xff1a;文章為本人真實測評博客&#xff0c;非廣告 目錄 引言 一、什么是KingbaseES&#xff1f; 二、KingbaseES核心特性 1. 一鍵遷移&#xff0c;極速性能&#xff0c;安全無憂? 2. 性能強勁&#xff0c;擴展性強&#xff0c;助力企業應對大規模并發挑戰? …

scikit-learn/sklearn學習|廣義線性回歸 Logistic regression的三種成本函數

【1】引言 前序學習進程中&#xff0c;已經對線性回歸和嶺回歸做了初步解讀。 實際上&#xff0c; Logistic regression是一種廣義的線性模型&#xff0c;在對線性分類的進一步學習前&#xff0c;有必要了解 Logistic regression。 【2】Logistic regression的3種成本函數 …

Tiptap(基于 Prosemirror)vs TinyMCE:哪個更適合你的技術棧?

在這之前&#xff0c;先來介紹一下 ProseMirror&#xff1a; 1. ProseMirror 是底層內核 定位&#xff1a;一個強大的 富文本編輯框架/引擎&#xff0c;不是一個成品編輯器。 作者&#xff1a;Marijn Haverbeke&#xff08;CodeMirror 作者&#xff09;。 核心思想&#xff1…

多墨智能-AI一鍵生成工作文檔/流程圖/思維導圖

本文轉載自&#xff1a;多墨智能-AI一鍵生成工作文檔/流程圖/思維導圖 - Hello123工具導航 ** 一、AI 文檔與視覺化創作助手 多墨智能是一款基于人工智能的在線工具&#xff0c;支持一鍵生成專業文檔、流程圖與思維導圖&#xff0c;通過關鍵詞輸入快速完成內容創作&#xff0…

Kafka_Broker_副本基本信息

Kafka副本作用&#xff1a;提高數據可靠性 Kafka默認副本1個&#xff0c;生產環境一般配置為2個&#xff0c;保證數據可靠性&#xff0c;太多副本會增加磁盤存儲空間&#xff0c;增加網絡上數據傳輸&#xff0c;降低效率 Kafka中副本分為&#xff1a;Leader和Follower&#xff…

FreeRTOS 中的守護任務(Daemon Task)

在 FreeRTOS 中&#xff0c;守護任務&#xff08;Daemon Task&#xff09;是一個特殊的系統任務&#xff0c;主要用于管理軟件定時器和其他后臺操作。以下是關于 FreeRTOS 守護任務的詳細信息&#xff1a; 守護任務的作用軟件定時器管理&#xff1a; 當啟用 configUSE_TIMERS 時…

博士招生 | 麻省理工學院 招收化學+人工智能方向 博士/博士后

內容源自“圖靈學術博研社”gongzhonghao學校簡介麻省理工學院&#xff08;MIT&#xff09;QS世界排名第1&#xff0c;是全球科技研究領域的頂尖學府。自成立以來&#xff0c;MIT以其卓越的科研和教育質量贏得了世界的尊敬。學校在科學、工程、經濟和管理等多個領域具有深遠的影…

云計算-OpenStack 實戰運維:從組件配置到故障排查(含 RAID、模板、存儲管理,網絡、存儲、鏡像、容器等)

介紹 在云計算技術快速發展的背景下,OpenStack 作為開源的云計算管理平臺,憑借其靈活性、可擴展性和強大的組件生態,成為構建私有云、公有云和混合云的重要選擇。無論是云主機的創建與管理、存儲方案的配置(如 RAID 陣列、Swift 對象存儲、Cinder 塊存儲),還是網絡編排、…