ORACLE计算表引占用空间大小

在ORACLE数据库中,如何计算一个表所占用的存储空间呢?我们可以通过系统视图DBA_SEGMENTS、USER_SEGMETNS、DBA_TABLES来查看一个表所占空间的大小,如下所示:

 
SELECT SEGMENT_NAME              TABLE_NAME

      ,SUM(BLOCKS)               BLOCKS

      ,SUM(BYTES)/(1024*1024)    "TABLE_SIZE[MB]"

FROM USER_SEGMENTS

WHERE  SEGMENT_TYPE=‘TABLE‘

   AND SEGMENT_NAME=&TABLE_NAME

GROUP BY SEGMENT_NAME;

 

 

SELECT SEGMENT_NAME              TABLE_NAME

      ,SUM(BLOCKS)               BLOCKS

      ,SUM(BYTES)/(1024*1024)    "TABLE_SIZE[MB]"

FROM DBA_SEGMENTS

WHERE  SEGMENT_TYPE=‘TABLE‘

   AND SEGMENT_NAME=&TABLE_NAME

GROUP BY SEGMENT_NAME;

注意,如果你通过系统视图DBA_TABELS、USER_TABLES统计、查看表所占的空间大小,那么由于统计信息过时或总是持续有DML操作(INSERTR、UPDATE、DELETE),那么有可能用下面SQL统计出的信息可能不准确。需要先收集一下表对象的统计信息。 另外,可能每个数据库的db_block_size有所不同,不一定是8192。所以注意修改.

ANALYZE TABLE OWNER.TABLE_NAME COMPUTE STATISTICS;
 

 

EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OWNER‘,‘TABLE_NAME‘);

 

 

SELECT OWNER                    OWNER_NAME

      ,TABLE_NAME               TABLE_NAME

      ,TABLESPACE_NAME          TABLESPACE_NAME

      ,BLOCKS                   ACTUAL_BLOCKS

      ,BLOCKS + EMPTY_BLOCKS    TOTAL_BLOCKS

      ,(BLOCKS + EMPTY_BLOCKS) * 8192/(1024*1024)

                                "TABLE_SIZE[MB]"

FROM DBA_TABLES

WHERE OWNER=&OWNER

  AND TABLE_NAME=&TABLE_NAME

关于DBA_TABLES和DBA_SEGMENTS表中的block的区别,其实它们的关系如下所示:

自动段空间管理(Automatic Segment Space Management ASSM)

dba_segments.blocks = dba_tables.blocks + dba_tables.empty_blocks

本地管理表空间(Locally Managed Tablespace )

dba_segments.blocks = dba_tables.blocks + dba_tables.empty_blocks+ 1(SEGMENT HEADER BLOCK)

DBA_SEGMENTS.BLOCKS      holds the total number of blocks allocated to the table.

DBA_TABLES.BLOCKS         holds the total number of blocks allocated for data.

DBA_SEGMENTS中的blocks表示分配给表的存储空间,而DBA_TABLES中blocks表示表中数据实际占有的存储空间。所以这个是有细微差别的。所以你如果要查表的实际占用大小,那么就要使用DBA_TABLES来查询。查看数据库中占用存储空间从大到小的所有表对象

SELECT SEGMENT_NAME              TABLE_NAME
      ,SUM(BLOCKS)               BLOCKS

      ,SUM(BYTES)/(1024*1024)    "TABLE_SIZE[MB]"

FROM DBA_SEGMENTS

WHERE  SEGMENT_TYPE=‘TABLE‘

GROUP BY SEGMENT_NAME

ORDER BY BLOCKS DESC;

时间: 2024-11-11 20:29:11

ORACLE计算表引占用空间大小的相关文章

JVM —— Java 对象占用空间大小计算

零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 需要知道缓存的对象是否会超过 JVM 最大堆限制, 如果会超过要设置相应算法如 LRU 来丢弃一部分缓存数据以满足后续内容的缓存 JVM 参数设置: 如果知道对象会被创建, 可以帮助判断 -Xmx 需要设置多少 只是为了好玩 一. 对象的内存布局 HotSpot 虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instan

【转】Linux命令之查看文件占用空间大小-du,df

原文网址:http://blog.csdn.net/wangjunjun2008/article/details/19840671 du(disk usage),顾名思义,查看目录/文件占用空间大小 #查看当前目录下的所有目录以及子目录的大小$ du -h $ du -ah #-h:用K.M.G的人性化形式显示 #-a:显示目录和文件   du -h tmp du -ah tmp#只查看当前目录下的tmp目录(包含子目录)的大小 #查看当前目录及其指定深度目录的大小du -h –-max-dep

快速查看SQL Server 中各表的数据量以及占用空间大小

快速查看SQL Server 中各表的数据量以及占用空间大小. CREATE TABLE #T (NAME nvarchar(100),ROWS char(20),reserved varchar(18) ,Data varchar(18) ,index_size varchar(18) ,Unused varchar(18) ) GO INSERT #T EXEC SP_MSFOREACHTABLE 'EXEC sp_spaceused "?"' SELECT * FROM #T O

oracle数据块的大小

标准数据块用于临时表空间和系统表空间,同时也是一个表空间数据块的默认值.标准数据块的大小是在创建数据库时由参数DB_BLOCK_SIZE确定的.若要改变这一设置必须重建数据库. DB_CACHE_SIZE设置数据库高速缓存的大小.其最小尺寸为一个granule,高速缓存的数据块的大小必须等于标准数据块的大小,因为标准数据块是数据库输入输出的基本单位和最小单位,数据由数据文件加载进入内存的最小数据容量必须是一个标准块. 如果要在数据库中使用非标准数据块就必须定义DB_CACHE_SIZE 和DB_

如何查看表占用空间大小 .

如何查看表占用空间大小 --定义表变量Create TABLE T( [name]           VARCHAR(max), [rows]           INT, reserved         VARCHAR(max), data_size        VARCHAR(max), index_size       VARCHAR(max), unused           VARCHAR(max)) --将表占用情况存放到表变量INSERT INTO TEXEC sp_MSf

VS2012在win7 64位机中x86和x64下基本类型的占用空间大小(转)

VS2012在win7 64位机中x86和x64下基本类型的占用空间大小 #include "stdafx.h" #include <windows.h> int _tmain(int argc, _TCHAR* argv[]) { int i = 0; i = sizeof(int); // x86:4 x64:4 i = sizeof(long); // x86:4 x64:4 i = sizeof(void*); // x86:4 x64:8 i = sizeof(s

如何查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件

要查看Oracle数据库表空间大小,是否需要增加表空间的数据文件,在数据库管理中,磁盘空间不足是DBA都会遇到的问题,问题比较常见. --1.查看表空间已经使用的百分比 Sql代码 select   a.tablespace_name,a.bytes/1024/1024 "Sum MB",(a.bytes-b.bytes)/1024/1024   "used MB",b.bytes/1024/1024 "free MB",round(((a.by

SQL查询表占用空间大小

SQL查询表占用空间大小. create table tmp (name varchar(50),rows int,reserved varchar(50),data varchar(50),index_size varchar(50),unused varchar(50))insert into tmp (name,rows,reserved,data,index_size,unused) exec sp_msforeachTable @Command1="sp_spaceused '?'&q

[转载]Oracle修改表空间大小

Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据的原因.如果在建立数据库时没有设置, Oracle 默认的表空间大小为400M,当数据库中数据量达到这个值,再向数据库中导入数据就会报错.解决方法是 扩展表空间.可以选择将表容量扩大,比如扩展到5G,或者当表空间不够时每次自动增加一定的容量,如每次自增200M. 下面列出详细过程: 1.通过sql