🧹 Giữ n8n nhẹ nhàng: Cách tự động xoá workflow execution cũ và tối ưu database

🧠 Giới thiệu

n8n là một trong những công cụ automation mã nguồn mở được yêu thích nhất hiện nay. Tuy nhiên, nếu bạn tự host n8n (Docker/VPS), sẽ nhanh chóng nhận ra: sau vài tuần, database trở nên cực kỳ nặng do ghi lại tất cả execution logs.

Kết quả? n8n chạy chậm, tốn RAM, thừa lừ dẫn đến crash khi truy cập UI.

Trong bài này, mình chia sẻ cách cấu hình tự động dọn dữ liệu execution cũ + VACUUM lại SQLite mỗi lần khởi động, giúp n8n nhẹ và ổn định lâu dài.

📊 Dành cho: ai tự host n8n (Docker, VPS, Pi), nhất là dùng SQLite

🎬 Kết quả sau khi cài

Database tự dọn log execution > 7 ngày

Tự động giới hạn số record (để SQLite không phình to vô hạn)

Hiệu năng UI và truy vấn cải thiện

🧩 Các bước thực hiện

Bước 1: Thêm các biến môi trường vào .env hoặc file docker-compose.yml

# Tự động xóa execution cũ
dotenv
EXECUTIONS_DATA_PRUNE=true

# Xóa những execution lâu hơn 7 ngày (168 giờ)
EXECUTIONS_DATA_MAX_AGE=168

# Giới hạn tối đa 50.000 execution logs
EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000

# Tự động VACUUM khi khởi động n8n
DB_SQLITE_VACUUM_ON_STARTUP=true

⚠️ Lưu ý: Chỉ hoạt động với SQLite, không có VACUUM cho Postgres.

Bước 2: Restart n8n

docker compose restart  # hoặc docker restart container

Sau khi khởi động lại, n8n sẽ tự:

  • Xóa execution > 7 ngày hoặc vượt 50k logs
  • VACUUM SQLite database để thu hồi dung lượng

🧨 Lỗi phổ biến & cách xử lý

n8n không xóa execution dù đã set .env

✨ Đảm bảo restart sau khi thay đổi file .env

✨ Kiểm tra logs khi khởi động xem biến môi trường đã được nạp

SQLite vẫn nặng sau VACUUM

VACUUM chỉ có tác dụng khi execution đã bị xoá

✨ Có thể dùng sqlite3 CLI để kiểm tra size

💡 Mẹo & tối ưu nâng cao

  • Dùng PostgreSQL nếu scale lớn, SQLite chỉ hợp cho instance nhỏ
  • Dùng n8n pruning CLI (nếu muốn xóa theo batch hoặc theo workflow ID)
  • Cài cron job backup SQLite để khôi phục khi có sự cố

🔗 Tài liệu tham khảo

  • n8n Environment Variables
  • SQLite VACUUM doc
  • n8n Community Tips

🙋‍♂️ Kết luận & mời gọi thảo luận

Giới hạn execution logs và VACUUM SQLite là bước cần thiết giúp n8n chạy nhẹ nhàng và ổn định khi tự host. Nhất là với người dùng n8n như task scheduler hoặc webhook pipeline.