为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8.1
【操作系统】:kylin
【CPU】:
【问题描述】*:
达梦数据库,有个表空间,从dba_segment看只用了2G,但是从dba_data_files和dba_free_space关联查询,使用18G很多。这个是什么原因?如何查询哪些对象占用的表空间比较多?dba_segment的信息如何刷新?
select name,
round(table_used_pages(sf_get_schema_name_by_id(schid),name) * page / 1024 /1024.0,2) as "实际大小(mb)"
,round(table_used_space(sf_get_schema_name_by_id(schid),name) * page / 1024 /1024.0,2) as "占用表空间大小(mb)"
from sysobjects
where sf_get_schema_name_by_id(schid) = '用户名'
and subtype$='UTAB'
order by 3 desc;
1个表空间可以对应1个或者多个数据文件,数据文件就相当于1个柜子:
1、dba_segment这个是查柜子里面的你的实际数据量有多大;
2、dba_data_files这个是查,你这个柜子实际占用了多大的磁盘空间;
表里面是否存在大字段?

1、dba_segments 这个字典是用来查一个段,你可以理解为一个对象、一个表、一个索引占了多大,并不是查数据文件占了多大。
2、数据文件在创建的时候可以指定初始值、阔大值、和最大值等。比如你初始值给了18G,但一个表用了2G,相当于在18G里使用了2G,还有16G没用,但空间已经划分出去了。大概就是这个意思。