视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle磁盘空间使用统计
2020-11-09 12:10:28 责编:小采
文档


对于大型数据库,Oracle占用的磁盘空间非常大,掌握数据库中那些用户、表占用了多杀磁盘空间,以及增长情况,可以方便日后对磁盘

对于大型数据库,Oracle占用的磁盘空间非常大,掌握数据库中那些用户、表占用了多杀磁盘空间,以及增长情况,可以方便日后对磁盘系统进行维护和扩充。

对Oracle磁盘空间使用情况,可以分为按照表空间、用户或者表来进行统计。

(一)、表空间

计算表空间的剩余大小

select A.TABLESPACE_NAME,A.BYTES/(1024*1024*1024) "SPACE(G)",
C.BYTES/(1024*1024) "FREE SPACE(M)",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=C.TABLESPACE_NAME;
或者

select tablespace_name, sum(bytes)/(1024*1024*1024) "SPACE(G)"
from dba_free_space
group by tablespace_name;
(二)、用户

计算每个用户占用的磁盘空间

select owner,sum(bytes)/1024/1024/1024 "Space(G)"
from dba_segments
group by owner
order by 2;
计算某个用户占用的磁盘空间

select owner,sum(bytes)/1024/1024/1024 "Space(G)"
from dba_segments
where owner='LIAOJL'
group by owner;
(三)、表

Oracle都是以段为存储的,segment_name包含了表、索引、回滚段等,所以在dba_extents,dba_segments都可以找到占用空间大小的信息。

select sum(bytes)/1024/1024 "Space(M)"
from dba_extents
where owner='LIAOJL' and segment_name='STUDENTS';
dba_segments也可以计算表的大小:

select segment_name,bytes/1024/1024 "Space(MB)"
from dba_segments
where SEGMENT_TYPE='TABLE' and segment_name=upper('你要查找的表的名字');
当时上面的写法不完全正确,当表是分区表,dba_segments有多条信息,可改成:

select segment_name,sum(bytes)/1024/1024 "Space(MB)"
from dba_segments
where segment_name=upper('你要查找的表的名字');
上述方法对于一个很大的数据库,SQL语句执行起来会很慢,而且消耗数据库资源。Oracle支持对表进行分析,执行分析表操作后可以在dba_tables等系统表中查询表大小、行数等信息,不过这些信息不是实时更新的,可以在数据库空闲时,通过计划任务来更新。

分析SQL方法:

analyze table tab_name compute statistics;
表太大的话可以执行:

analyze table tab_name estimate statistics;

下载本文
显示全文
专题