pctfree oracle空闲块,用于dml操作,当更新的数据大于原有数据大小,则会用到空闲块,如果块中空闲空间不足,则会发生行迁移,影响查询性能,行迁移可以针对表重建解决,也可以用来解决高水位线。
高水位线(high water mask)
high water mask 高水位线 用来说明已经有多少没有使用的数据块分配给segment,HWM每次涨幅5个数据块,只会增加不会减少,即使表中没有数据。
造成的影响
1)全表扫描通常要读取直到HWM标记的数据块,即使表中无数据。
2)在insert时即使HWM下有空闲数据块,也会使用HWM以上的数据块,此时HWM会增大。
分析表高水位线
1)分析表结构
ANALYZE TABLE table_name ESTIMATE/COMPUTE STATISTICS;
2)查询试图
SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name = ‘table_name’;
说明:
blocks 代表表的水线
empty_blocks 代表分配给表但是没有使用的数据块
(user_tables.blocks+user_tables.empty_blocks+1)=dba_segments.blocks
出现原因
针对表做delete操作时,会将数据块中数据删除,在此往该表中插入数据的时候,这些没有数据的数据块依然不会被使用。
处理方法
1)表碎片整理
alter table table_name enable row movement;
alter table table_name shrink space;
alter table table_name disable row movement;
2)表移动
alter table table_name move;
alter index index_name rebuild online;
3)truncate表
truncate table table_name;
使用该命令是确保表中无数据或无有效数据。