Oracle
刪除再插入相同數據後,表大小無限增長
我創建一個表並用數據填充它:
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 命令。