🫥
PostgreSQLにDELETE実行しても、ストレージの空き容量は増えない?
ことの発端
とある開発案件にてアーキテクチャについて説明している際、プロジェクト関係者より
「DBにDELETEクエリ発行してもストレージの空き容量増えないので、無駄な書き込みや削除作業によってストレージが圧迫されることが心配です。」
と言われました。
お恥ずかしながら初めて聞いた内容でしたので、一旦事実確認のためにローカルで検証することにしました。
検証方法
ローカルでPostgreSQLのDBを立ち上げて、データをINSERTしたりDELETEしたり、データサイズを測ったりする。
以下の2ケースのストレージサイズを比較する。
- [ケース1] 1GBのデータを2回連続でINSERTし、500MBのデータをDELETEした際のストレージサイズ
- [ケース2] 1GBのデータを1回INSERTしたあと、500MBのデータをDELETEし、再度1GBのデータを1回INSERTした際のストレージサイズ
使用した技術
- docker compose: v2.27.0-desktop.2
- postgresql: 16系
- node.js: 22系
結果
ケース2の方が、ケース1の3/4のサイズで収まった。
表示上のストレージ量は変わらないが、物理的にはちゃんと削除されていることが分かった。
[ケース1]
▼1回目のinsertが終わった後
▼2回目のinsertが終わった後
▼2回目のinsertが終わった後、deleteした際のストレージ
[ケース2]
▼1回目のinsertが終わった後(ここまでは同じ)
▼1回目のinsertが終わった後のdelete後
▼1回目のinsertが終わった後にdeleteし、2回目のinsertをした後
Discussion