0

0

如何排查表空间被哪个对象占用最多_DBA_SEGMENTS空间分布统计

P粉602998670

P粉602998670

发布时间:2026-03-16 04:05:14

|

903人浏览过

|

来源于php中文网

原创

应优先通过DBA_SEGMENTS计算表空间真实使用率以规避DBA_FREE_SPACE碎片失真,再定位TOP20大段并区分LOB/INDEX等类型,最后关联查询LOB和索引归属表,同时排查临时段与UNDO段异常增长。

查表空间整体使用率:先看“谁最挤”,再深入挖

表空间爆满时,第一反应不是直接翻对象,而是确认哪个表空间真的告急。dba_free_space 在高碎片场景下统计失真,尤其当使用率超过 90% 时,它可能把大量无法合并的小空闲块算作“可用”,误导判断。这时候必须以 dba_segments 为基准——它反映的是已分配段的真实字节数,不依赖空闲块合并状态。

  • 运行这条 SQL 获取真实使用率(按段计算):
    SELECT df.tablespace_name AS "表空间名",<br>  ROUND(SUM(df.bytes)/1024/1024,2) AS "总大小(MB)",<br>  ROUND(SUM(s.bytes)/1024/1024,2) AS "已使用(MB)",<br>  ROUND((SUM(df.bytes)-SUM(s.bytes))/1024/1024,2) AS "剩余空间(MB)",<br>  ROUND(SUM(s.bytes)/SUM(df.bytes)*100,2) AS "使用率(%)"<br>FROM dba_data_files df<br>JOIN dba_segments s ON df.tablespace_name = s.tablespace_name<br>GROUP BY df.tablespace_name<br>ORDER BY "使用率(%)" DESC;
  • 注意 SUM(s.bytes) 是关键:它绕过了 DBA_FREE_SPACE 的碎片盲区,直接从“已分配”角度算账
  • 如果某表空间显示使用率 98%,但 DBA_FREE_SPACE 报出还有 500MB 空闲,大概率是碎片严重,不能信

定位前 20 大段:聚焦 DBA_SEGMENTS,别只盯表

很多人查完表空间发现 USERS 占了 95%,就立刻去 DBA_TABLES 找大表——这会漏掉真正吃空间的“隐形大户”。一张带 CLOB 字段的表,其 LOBSEGMENTLOBINDEX 可能比表段本身还大好几倍;一个高频更新的索引,INDEX 段也可能远超基表。

  • 用这个查询直击表空间内真实空间占用 TOP 20:
    SELECT owner, segment_name, segment_type, partition_name,<br>  ROUND(bytes/1024/1024,2) AS "大小(MB)"<br>FROM dba_segments<br>WHERE tablespace_name = 'USERS'<br>ORDER BY bytes DESC<br>FETCH FIRST 20 ROWS ONLY;
  • segment_type 必须关注:看到 LOBSEGMENTINDEXTABLE PARTITION 都要单独记下来,不能默认只有 TABLE 才重要
  • 如果结果里出现大量 UNDOTEMPORARY 类型段,说明有长事务或排序操作未结束,得结合 V$TRANSACTIONV$TEMPSEG_USAGE 追踪

关联 LOB 和索引:搞清“谁在背后占空间”

查到一个大 LOBSEGMENT 名叫 SYS_LOB0000092320C00005$$,你肯定不认识——它不会告诉你属于哪张表。同理,一个名字像 IDX_ORD_CUSTID 的索引,你也得确认它是不是真挂载在核心订单表上,还是某个测试表的残留。

  • 查 LOB 所属表:
    SELECT l.owner, l.table_name, l.column_name, s.bytes/1024/1024 AS "lob_size_mb"<br>FROM dba_lobs l<br>JOIN dba_segments s ON l.segment_name = s.segment_name<br>WHERE s.tablespace_name = 'USERS' AND s.segment_type = 'LOBSEGMENT';
  • 查索引归属的基表:
    SELECT i.owner, i.index_name, i.table_owner, i.table_name, s.bytes/1024/1024 AS "idx_size_mb"<br>FROM dba_indexes i<br>JOIN dba_segments s ON i.index_name = s.segment_name AND i.owner = s.owner<br>WHERE s.tablespace_name = 'USERS' AND s.segment_type = 'INDEX';
  • 特别注意:dba_lobs 中的 segment_namedba_segments 中的完全一致,这是唯一可靠关联点;别用 table_name 去 join,因为分区表的 LOB 段名不含表名

临时段和 UNDO 段异常增长:容易被忽略的“空间刺客”

有时候你查遍了 TABLEINDEXLOBSEGMENT,TOP 20 里没一个明显异常,但表空间还在涨——八成是临时段或 UNDO 段在偷偷吃空间。它们不持久,但一次大排序或未提交事务就能瞬间拉高使用率。

YOO必优科技-AI写作
YOO必优科技-AI写作

智能图文创作平台,让内容创作更简单

下载
  • 查当前活跃临时段:
    SELECT s.username, u.segtype, u.contents, u.extents, u.blocks*8/1024 AS "mb_used"<br>FROM v$sort_usage u<br>JOIN v$session s ON u.session_addr = s.saddr;
  • 查 UNDO 表空间中长事务:
    SELECT s.sid, s.serial#, s.username, t.used_ublk, t.start_time<br>FROM v$transaction t<br>JOIN v$session s ON t.ses_addr = s.saddr<br>WHERE t.start_time < SYSDATE - 1/24; -- 超过 1 小时的事务
  • 临时段不会出现在 DBA_SEGMENTS 里(除非你显式创建了永久临时段),所以必须用 v$sort_usage;UNDO 段则只在 UNDO 表空间内,若你在 USERS 里看到 UNDO 类型段,说明配置错误,得马上纠正

查清楚不是终点。真正难的是区分:哪些是业务必需的大对象,哪些是可归档的历史分区,哪些是开发留下的测试索引——这些判断没法靠 SQL 给出答案,得翻日志、问业务、看上线记录。空间分析的门槛不在语法,而在知道该怀疑谁、该问什么人。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1135

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2235

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1743

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

586

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

441

2024.04.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号