中級向け

n8n の実行履歴はどれだけ溜まるのか:削除してもファイルが縮まない話

実行1回でデータベースがどれだけ増えるかを実測しました。自動削除は既定で効いていますが、削除してもファイルは1バイトも縮みません。VACUUM で実際に何KB戻るかまで測っています。

動作確認: — n8n 2.36.8 / Windows 11

セルフホストで n8n を動かしていると、実行履歴が溜まります。

ワークフローが増え、定期実行が回り始めると、データベースは静かに大きくなります。 どれくらいの速さで増えるのか、放っておくとどうなるのか、 減らすにはどうするのかを実測しました。

この記事は npm でインストールした n8n(SQLite) の話です。 PostgreSQL では事情が変わります。

実行1回でどれだけ増えるか

流したデータの量で決まります。 同じワークフローでも、扱う件数次第で100倍変わります。

手元の環境で、実際に保存されていた実行データのサイズです。

実行の内容 保存された大きさ
ノード数個・アイテム数件(記事の検証で使ったもの) 2〜4KB
1,000件 × 1件あたり200文字 を2ノード通した実行 193KB

同じ1回の実行でも、50〜100倍の開きがあります。

保存先は execution_data というテーブルで、 ~/.n8n/database.sqlite の中にあります。

自動削除は既定で効いている

放置すると無限に増えるのか。そうではありません。

インストール済みの n8n の設定を確認したところ、既定値はこうでした。

環境変数 既定値 意味
EXECUTIONS_DATA_PRUNE true 自動削除する
EXECUTIONS_DATA_MAX_AGE 336(時間) 14日より古いものを消す
EXECUTIONS_DATA_PRUNE_MAX_COUNT 10000 この件数を超えた分を消す

何も設定しなくても、14日か10,000件で頭打ちになります。

削除してもファイルは縮まない

ここが本題です。

自動削除が効いていても、ディスクの使用量は減りません。 データベースのコピーを取って確かめました(本番のDBには触れていません)。

状態 本体ファイル 空きページ
実行履歴93件(1,318KB)あり 3,920KB 0KB
実行履歴を全部削除した直後 3,920KB 1,652KB
VACUUM した後 2,228KB 0KB

全部消しても、ファイルは1バイトも縮みませんでした。

この挙動は、増えるときにも現れます。実行履歴を 545KB から 1,318KB まで増やしたとき、 ファイルサイズは 6,940KB のまま変わりませんでした。 空き領域を使い回していたためです。

「ディスクが減らないから削除されていない」とは限りません。 逆に 「ファイルが増えていないから溜まっていない」とも限りません。 中身とファイルサイズは連動していません。

保存そのものを止める

履歴を消すのではなく、最初から保存しない設定もあります。 ワークフローの ... → Settings にあります。

  • Save failed production executions
  • Save successful production executions
  • Save manual executions

どれも既定は Default - Save です。

Save manual executions を保存しない側にして、193KB のワークフローを実行した結果です。

保存されたデータ
通常 193KB
保存しない設定 1KB

約1/190になりました。大きいデータを扱うワークフローを何度もテストするときには効きます。

実際にやること

  1. まず測る。 ~/.n8n/database.sqlite のサイズを見る。数MBなら気にしなくていい
  2. 大きいなら、どのワークフローが太らせているか調べる。 実行回数ではなく 1回あたりのデータ量を見る
  3. テスト中のワークフローは保存を切る。 大量データを何度も流すなら効果が大きい
  4. ファイルを小さくしたいなら VACUUM。 削除だけでは縮みません

検証していないこと

  • VACUUM を本番のデータベースに実行していません。 コピーに対して行い、 効果を測っただけです。手順として書いていますが、自分では実行していません
  • 自動削除(14日 / 10,000件)が実際に働くところは見ていません。 設定の既定値を読み取っただけです
  • PostgreSQL では検証していません。 SQLite の話です
  • Save manual executions を切ったときに残る running の行が、 後で掃除されるのかどうかは分かりません
  • バイナリデータ(ファイル添付など)を含む実行は測っていません。 ~/.n8n/storage に置かれるようですが、中身を確認していません
  • 測ったのは手元の1環境だけです。件数も93件と小規模です

まとめると、自動削除は効いているが、ディスクは戻らない。 これが n8n をセルフホストするときの実行履歴の性質です。

次に読む