Oracle

刪除再插入相同數據後,表大小無限增長

  • February 24, 2020

我創建一個表並用數據填充它:

create table tab
as
select 'value' || level val
from dual
connect by level <= 10000;

如果我然後刪除所有行並插入相同的數據:

delete from tab;

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

commit;

每次執行 delete-then-insert 時,表的大小都會增加。多次執行這些操作會導致表增長到其原始大小的許多倍。

我希望大小保持(大約)相同。為什麼會這樣?

刪除將空間標記為空閒,它實際上並沒有縮小段。隨後的插入應首先使用 HWM 以下的可用空塊。

我可以使用alter table tab shrink space.

我在 Oracle 12 和 Oracle 18c 中進行了測試。

如果您有權訪問 My Oracle Support:

表使用的空間沒有被重複刪除/插入操作重複使用(文件 ID 1601805.1)

因此,不只是從那裡複製粘貼內容,上面的註釋指出:

  • 空間管理算法更喜歡分配更多空間而不是重用已分配但可用的空間
  • 這不是一個錯誤,而是一個特性,這就是它的設計方式
  • 正如您已經發現的那樣,您可以使用收縮來壓縮段

而不是使用刪除,使用 TRUNCATE TABLE 命令。

引用自:https://dba.stackexchange.com/questions/260375