🫥

PostgreSQLにDELETE実行しても、ストレージの空き容量は増えない?

2024/06/16に公開

ことの発端

とある開発案件にてアーキテクチャについて説明している際、プロジェクト関係者より
「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