注册
DCP与实际项目相结合之FILLFACTOR参数
培训园地/ 文章详情 /

DCP与实际项目相结合之FILLFACTOR参数

^_^ 2025/07/29 61 0 0

近期参加了DCP培训,接触到表、索引存储参数:fillfactor。有个项目使用达梦去O,涉及大表参数设计,故专门对该参数做了测试、研究,在此与大家分享。
存储参数fillfactor:每个数据页和索引页的充满程度,取值范围从 0 到 100。可以通过设置 INI 参数 DEFAULT_FILLFACTOR 来设置填充比例的默认值。DEFAULT_FILLFACTOR 的取值范围为 0~100,缺省值为 0 ,等价于 100,表示全满填充。插入数据时填充比例的值越低,可由更新数据使用的空间就越多;填充比例越高,对于插入操作可以减少空间占用量,但更新数据导致页分裂的几率更大,进而引发性能问题,该参数适用于表、索引。
测试一:
首先创建了四张表(fillfactor参数不同)
image.png
在对应表上创建对应比例的索引
image.png
为保证插入数据一致,创建一张同结构数据源表,插入一条原始数据后,进行数据复制(共1048576条)。
image.png
将数据分别灌入四张表后commit:
image.png
观察对应表、索引的存储空间占用情况:
select segment_name, segment_type,header_block, bytes / 1024 / 1024,blocks,extents
from dba_segments
where segment_name like 'TAB%' order by 2,1

image.png
从测试结果看,索引的填充参数生效了,使用默认填充值的索引存储消耗量的确最小,验证了“fillfacor缺省值为 0 ,等价于 100”,而表的填充存储参数没有生效,表大小均为94M。
那么通过单条insert来进行测试结果如何呢,清空四张表。通过manager生成指定数据(1048576行)
测试二:
image.png
确认各表行数:
image.png
查看、对比各表、索引存储使用情况。
image.png
发现普通单条insert操作,表的fillfactor参数生效了,对应参数值80、40、20所消耗的存储量基本是倍数关系。其中默认填充值的表大小为94M,与测试一的各表存储大小一致,说明表到表的直接insert,fillfactor存储参数会使用默认值。
通过上述测试,基本可以得出以下结论,为生产环境提供借鉴:
1、创建表及索引时,fillfactor参数不建议使用默认值(0),不利于表数据更新操作,易产生页分裂,造成额外IO,形成系统性能问题。
2、避免表到表的直接insert操作(测试库版本(DMV8 Msg Version: 32),会使用fillfactor默认参数(0)完成填充页。
3、合理设置fillfactor值,如数据插入表后很少被update,这类表的fillfactor参数可以设置大些(如:90),节省空间;如果表数据频繁update,fillfactor参数可以设置小些(如:80或更小),可避免页分裂及热点块的形成,当然空间消耗会略多些。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服