目录
背景
生产环境Oracle单表数据量超过200W左右,再将其数据全部删除后,发现占用的磁盘空间并没有自动回收。
特别说明:该表中有CLOB列。(TO_BE_PUSHED_MESSAGE.MESSAGE_CONETENT)。
理论情况是这样:
- 随着不断的insert会导致高水位线不断的右移,而记录的delete并不会导致高水位线左移
- delete记录后,高水位线(HWM,high water mark)左侧的空间依然可以使用,但是其会碎片化,导致空间空闲,但从操作系统层面来看,依然是空间占用
- 如果有FULL SCAN全表扫描的话,其花费的时间不会因为记录的减少而减小,因为空的块也会被扫描
注意:如果是删除全表数据,可以考虑使用truncate语句,这样就可以自动收缩空间。
思路 - 利用shrink space语句
利用Oracle提供的shrink space语句实现碎片整理及空间释放。