目录

  • 实用技巧: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 块存储),还是网络编排、…