n8n Environment variables-Executions
在n8n平台不論手動或自動執行workflow,都會將執行紀錄紀錄在資料庫。隨著使用時間增加,n8n資料庫可能會不斷增長並影響執行效能。
為避免這種情況,n8n建議不要保存不必要的數據,並啟用對舊資料的清理。
依據官網文件
Executions environment variables
Execution data
進行設定。
主機環境
Ubuntu 24.04.3 LTSDocker version v28.5.1
Docker compose version v2.40.3
n8n Community Edition version 1.118.1 (n8nio/n8n)
設定過程
1.手動刪除
檢查執行紀錄手動刪除紀錄
參數說明
# 儲存結束於錯誤的執行
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
# 不要保存成功执行
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
# 不要為每次執行保存節點進度
- EXECUTIONS_DATA_SAVE_ON_PROGRESS=true
# 不要保存手動啟動的執行
- EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false
# 儲存結束於錯誤的執行
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
# 不要保存成功执行
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
# 不要為每次執行保存節點進度
- EXECUTIONS_DATA_SAVE_ON_PROGRESS=true
# 不要保存手動啟動的執行
- EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false
於docker-compose.yml增加以下設定
---
# Reduce saved data
# Save executions ending in errors
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
# Don't save successful executions
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
# Don't save node progress for each execution
- EXECUTIONS_DATA_SAVE_ON_PROGRESS=true
# Don't save manually launched executions
- EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false
---
以上是全平台的設定,也可以參考工作流程設置, 針對單一工作流程配置這些設定。
---
# Reduce saved data
# Save executions ending in errors
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
# Don't save successful executions
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
# Don't save node progress for each execution
- EXECUTIONS_DATA_SAVE_ON_PROGRESS=true
# Don't save manually launched executions
- EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false
---
以上是全平台的設定,也可以參考工作流程設置, 針對單一工作流程配置這些設定。
3.定期刪除資料
n8n預設啟用executions pruning,會定期刪除已完成的執行及其執行資料和二進位資料。出於效能考慮,刪除會先標記要刪除的目標,然後再將其永久移除。參數說明
# 啟用executions pruning
- EXECUTIONS_DATA_PRUNE=true
# 執行完成時間超過設定的時間,n8n會刪除超過設定時間的資料。預設值:336小時,單位為小時。
# 啟用executions pruning
- EXECUTIONS_DATA_PRUNE=true
# 執行完成時間超過設定的時間,n8n會刪除超過設定時間的資料。預設值:336小時,單位為小時。
- EXECUTIONS_DATA_MAX_AGE=336
# 執行總數超過 EXECUTIONS_DATA_PRUNE_MAX_COUNT 設定值,n8n會從最早到最新刪除執行記錄。預設值:10000。如果設為0則為無限制。
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=10000
# 執行總數超過 EXECUTIONS_DATA_PRUNE_MAX_COUNT 設定值,n8n會從最早到最新刪除執行記錄。預設值:10000。如果設為0則為無限制。
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=10000
記住事項:
a.處於new、running或 waiting 狀態的執行不符合刪除條件。
b.帶有註釋的執行(例如,帶有標籤或評分的執行)永遠不會被刪除。
C.定時刪除時,設定參數EXECUTIONS_DATA_HARD_DELETE_BUFFER 安全緩衝期(預設值:1小時),以確保在使用者建置或偵錯工作流程時,最近的資料仍然可用。
a.處於new、running或 waiting 狀態的執行不符合刪除條件。
b.帶有註釋的執行(例如,帶有標籤或評分的執行)永遠不會被刪除。
C.定時刪除時,設定參數EXECUTIONS_DATA_HARD_DELETE_BUFFER 安全緩衝期(預設值:1小時),以確保在使用者建置或偵錯工作流程時,最近的資料仍然可用。
可以自行設定EXECUTIONS_DATA_MAX_AGE及EXECUTIONS_DATA_PRUNE_MAX_COUNT的數字,來保持資料完整
於docker-compose.yml增加以下設定
---
# Clear EXECUTIONS_DATA
# Enable executions pruning
- EXECUTIONS_DATA_PRUNE=true
# How old (hours) a finished execution must be to qualify for soft-deletion
- EXECUTIONS_DATA_MAX_AGE=168
# Max number of finished executions to keep.
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
---
---
# Clear EXECUTIONS_DATA
# Enable executions pruning
- EXECUTIONS_DATA_PRUNE=true
# How old (hours) a finished execution must be to qualify for soft-deletion
- EXECUTIONS_DATA_MAX_AGE=168
# Max number of finished executions to keep.
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
---
docker-compose.yml
注意項目
官方文件提到,如果使用預設SQLite資料庫執行n8n,則任何已清理資料的磁碟空間不會自動釋放,而是會重新用於後續執行的資料。若要釋放此空間,請設定環境變數(DB_SQLITE_VACUUM_ON_STARTUP=true)或手動執行 VACUUM 操作。
後續事項
20251203
1.設定EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false,手動執行工作流時出現錯誤時無法自動停止,須要手動停止。
n8n會出現以下訊息。
Attempt to read execution was blocked due to insufficient permissions
Unable to stop execution "2070" as it was not found
AI協助提供以下答案:
EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS設為false,手動執行只會跑邏輯,不會在DB存完整的執行紀錄。這會導致前端或 API 在讀取/停止該執行時找不到對應資料,就可能會出現的兩個錯誤訊息。
Attempt to read execution was blocked due to insufficient permissions 錯誤
在UI在點「測試工作流程」或打開節點執行結果時,會去讀對應的 execution 資料;若該 ID 在 DB 裡沒有對應內容(因為手動執行未被儲存或已被清除),就可能出現「Attempt to read execution was blocked due to insufficient permissions」這類訊息,實際上常見原因之一是 execution record 不存在或不完整,而非真的RBAC權限錯誤。
若系統在啟動時偵測到「有execution row,但缺少 executionData」的異常,也會在 log 裡報類似錯誤,並且後續對這些 execution 的讀取會被阻擋,避免使用者看到不一致資料。
Unable to stop execution "2070" as it was not found 錯誤
停止執行(UI的Stop按鈕或 POST /executions/:id/stop)會先查詢該execution ID,在DB或 queue 裡找對應的執行紀錄;如果找不到,就會回傳「execution not found」或類似訊息。
在手動執行不儲存、或該執行資料被 prune / hard delete 之後,前端仍保留舊的 execution ID,這時去 Stop 就會得到「Unable to stop execution '2070' as it was not found」這種錯誤。
建議保留 EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=true,方便在UI中查看「測試執行」的歷史、debug 節點輸出、或隨時手動Stop測試流程,並改用 EXECUTIONS_DATA_PRUNE、EXECUTIONS_DATA_MAX_AGE 等變數來控管DB大小。




沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。