中級向け
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になりました。大きいデータを扱うワークフローを何度もテストするときには効きます。
実際にやること
- まず測る。
~/.n8n/database.sqliteのサイズを見る。数MBなら気にしなくていい - 大きいなら、どのワークフローが太らせているか調べる。 実行回数ではなく 1回あたりのデータ量を見る
- テスト中のワークフローは保存を切る。 大量データを何度も流すなら効果が大きい
- ファイルを小さくしたいなら VACUUM。 削除だけでは縮みません
検証していないこと
- VACUUM を本番のデータベースに実行していません。 コピーに対して行い、 効果を測っただけです。手順として書いていますが、自分では実行していません
- 自動削除(14日 / 10,000件)が実際に働くところは見ていません。 設定の既定値を読み取っただけです
- PostgreSQL では検証していません。 SQLite の話です
Save manual executionsを切ったときに残るrunningの行が、 後で掃除されるのかどうかは分かりません- バイナリデータ(ファイル添付など)を含む実行は測っていません。
~/.n8n/storageに置かれるようですが、中身を確認していません - 測ったのは手元の1環境だけです。件数も93件と小規模です
まとめると、自動削除は効いているが、ディスクは戻らない。 これが n8n をセルフホストするときの実行履歴の性質です。
- データの置き場所とバックアップは n8n をローカルで動かす
- 実行の考え方は n8n 用語集
- 実行履歴が2倍に増える書き方は Execute Sub-workflowの使い方