问题描述:
项目涉及用户量大且数据量大,为提高查询性能采用分表方式处理数据;根据业务要求总共4张业务表,每张业务表扩展成100张表,系统中总共400张表。部署至测试环境发现测试环境占用的磁盘空间是开发环境的8倍。
问题排查:
查询达梦数据库资料,数据库由表空间组成,表空间由多个数据文件组成,数据文件由簇组成,簇由磁盘上连续的页组成,页是数据库的最小分配单元。
查询对比开发环境与测试环境达梦数据库设置的页大小与簇大小
可以看到,开发环境页大小为8K,簇大小为16页;测试环境页大小为32K,簇大小为32页。也就是说一个簇在开发环境占用的磁盘空间为8K×16页=128K,测试环境占用空间为32K×32页=1M。测试环境的空间占用正好是开发环境的8倍。
我们再根据簇的大小来推算出每个表空间占用大小,通过查询达梦数据库系统表DBA_SEGMENTS,可以查询到表占用的簇数量和页数量,EXTENTS是段所使用的簇的数量,BLOCKS是占用的页数量。可以看出该表使用2个簇,即占用2*128K=256K的空间。
select t.SEGMENT_NAME,
t.SEGMENT_TYPE,
t.TABLESPACE_NAME,
t.BLOCKS,
t.EXTENTS,
t.BYTES,
t.NEXT_EXTENT
from DBA_SEGMENTS t
where t.OWNER= '用户名'
AND t.SEGMENT_NAME='表名';