删除然后插入相同数据后,表大小无限增长

Ada*_*ium 5 oracle delete insert size table

我创建一个表并用数据填充它:

create table tab
as
select 'value' || level val
from dual
connect by level <= 10000;
Run Code Online (Sandbox Code Playgroud)

如果我然后删除所有行并插入相同的数据:

delete from tab;

insert into tab
select 'value' || level val
from dual
connect by level <= 10000;

commit;
Run Code Online (Sandbox Code Playgroud)

每次执行删除然后插入时表大小都会增加。多次执行这些操作会导致表增长到原始大小的许多倍。

我希望大小保持(大约)相同。为什么会这样?

删除将空间标记为空闲,它实际上并没有缩小段。后续插入应首先使用 HWM 以下的可用空块。

我可以使用alter table tab shrink space.

我在 Oracle 12 和 Oracle 18c 中进行了测试。

Bal*_*app 7

如果您有权访问 My Oracle Support:

表使用的空间不会通过重复删除/插入操作重新使用(文档 ID 1601805.1)

因此,不只是从那里复制粘贴内容,上面的注释指出:

  • 空间管理算法更喜欢分配更多空间而不是重用已分配但可用的空间
  • 这不是错误,而是功能,这就是它的设计方式
  • 正如您已经发现的那样,您可以使用收缩来压缩该段