dba_segments和dba_tables的不同

create table tset as select * from dba_objects;

select count(*) from tset;

select table_name,blocks,empty_blocks from dba_tables

where table_name=’TSET’;

select segment_name,bytes,blocks,extents from dba_segments

where segment_name=’TSET’;

问题来了,从dba_tables查询的blocks是空的,不按常理出牌啊~~什么鬼,什么鬼

select table_name,blocks,empty_blocks,last_analyzed from dba_tables

where table_name=’TSET’;

last_analyzed是分析的时间,为空值表示没有分析,所以执行语句分析下看看

analyze table tset compute statistics;

1071+80=1151

好像还少一个blocks,不是好像,就是少一个block。(先放这吧,不确定能找到为什么)。

以上是我发现dba_tables和dba_segments的blocks数量不一致后查询网络得出的;

大概个人总结以下:

1.dba_segments中的blocks对应的是dba_tables中的blocks+empty_blocks

2.

The dba_tables view describes a "logical" structure whiledba_segments describes the "physical" data segment, like a data file.

Also, columns like "blocks" are different between dba_tables and dba_segments.  In dba_tables, the "blocks" are calculated when you run dbms_stats, while indba_segments, "blocks" is the actual number of blocks used by the object on disk.

(不解释,解释不了,我感觉只是感觉理解了),附上链接:http://www.dba-oracle.com/t_difference_dba_tables_dba_segments.htm

oracle社区里有个不是使用CTAS创建表来说明dba_segments和dba_tables不一致的问题,我重复一遍吧:

1. create table tset1 as select * from dba_objects where 1=0;

select segment_name,bytes,blocks,extents from dba_segments

where segment_name=’TSET1’;

插播:

TSET1表的行数为0;默认分配一个extent,一个extent=8 blocks,一个block=8k(65536/1024/8)

oracle 11g不是延迟段分配的吗(默认)?

好吧,先不管了,下次再说吧,插播到此结束。

2.select table_name,blocks,empty_blocks from dba_tables where table_name=’TSET1’;

analyze table tset1 compute statistics;

select table_name,blocks,empty_blocks from dba_tables where table_name=’TSET1’;

3.insert into tset1 select * from dba_objects;

commit;

4. select segment_name,bytes,blocks,extents from dba_segments

where segment_name=’TSET1’;

select table_name,blocks,empty_blocks from dba_tables

where table_name=’TSET1’;

analyze table tset1 comput statistics;

select table_name,blocks,empty_blocks from dba_tables

where table_name=’TSET1’;

1068+83=1151,还是不等于1152

附上oracle社区的链接,上面的测试结果是相等的哦!

https://community.oracle.com/thread/582356?start=0&tstart=0

时间: 2024-08-12 14:06:49

dba_segments和dba_tables的不同的相关文章

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_SEG

杂乱无章之Oracle(一)

1. 设置共享池大小 SQL>ALTER  SYSTEM  SET  SHARED_POOL_SIZE=32M; 2. 数据库高速缓冲区(database  buffer  cache):SQL语句首先在数据库高速缓冲区(database  buffer  cache)中搜寻所需的数据,如果找到了就直接使用而不进行磁盘操作:反之,就将进行磁盘操作把数据文件中的数据读入到数据库高速缓冲区中. 设置数据库高速缓冲区大小 SQL>ALTER  SYSTEM  SET  DB_CACHE_SIZE=4

[转]Oracle 索引质量分析

http://blog.csdn.net/leshami/article/details/23687137 索引质量的高低对数据库整体性能有着直接的影响.良好高质量的索引使得数据库性能得以数量级别的提升,而低效冗余的索引则使得数据库性能缓慢如牛,即便是使用高档的硬件配置.因此对于索引在设计之初需要经过反复的测试与考量.那对于已经置于生产环境中的数据库,我们也可以通过查询相关数据字典得到索引的质量的高低,通过这个分析来指导如何改善索引的性能.下面给出了演示以及索引创建的基本指导原则,最后给出了索引

INITIAL参数设置导致TRUNCATE TABLE不能降低高水位线案例

在一个数据库使用下面SQL找出了一批需要降低高水位线的表,其中有几个表没有数据,于是我打算用TRUNCATE来降低高水位线HWM SELECT a.owner,        a.segment_name,        a.segment_type,        a.tablespace_name,        a.blocks              "real block",        a.bytes / 1024 / 1024 "realSizeMB&quo

分析索引质量脚本

--script name: idx_quality.sql     --Author : Leshami  --Blog: http://blog.csdn.net/leshami   --index quality retrieval  SET LINESIZE 145  SET PAGESIZE 1000  SET VERIFY OFF    CLEAR COMPUTES  CLEAR BREAKS    BREAK ON table_name ON num_rows ON blocks

oracle常用查询sql

oracle常用查询sql 原创 gordon陈 发布于2018-05-10 22:32:18 阅读数 297 收藏 展开 #!/bin/sh## create by Gordon Chen echo "\n=============`date`===================\n" if [ "$LOGNAME" = "oracle" ]; then   SQLPLUS_CMD="/ as sysdba";else  

Oracle DBA_EXTENTS视图 与 DBA_SEGMENTS视图

DBA_EXTENTS describes the extents comprising the segments in all tablespaces in the database. Note that if a datafile (or entire tablespace) is offline in a locally managed tablespace, you will not see any extent information. If an object has extents

Oracle “dba_tables”介绍

DBA_TABLES describes all relational tables in the database. Its columns are the same as those in ALL_TABLES. To gather statistics for this view, use the ANALYZE SQL statement. ALL_TABLES describes the relational tables accessible to the current user.

oracle/ms sql 系统表

sql server系统表详细说明 sysaltfiles 主数据库 保存数据库的文件 syscharsets 主数据库字符集与排序顺序 sysconfigures主数据库 配置选项 syscurconfigs主数据库当前配置选项 sysdatabases主数据库服务器中的数据库 syslanguages主数据库语言 syslogins主数据库 登陆帐号信息 sysoledbusers主数据库 链接服务器登陆信息 sysprocesses主数据库进程 sysremotelogins主数据库 远程