If your n8n workflow is running slowly, it usually means one or more nodes are taking too long to execute, or the system is under-resourced. Here's a complete guide to help you identify and fix performance bottlenecks in n8n:
π’ Why Your n8n Workflow Is Running Slowly (and How to Fix It)
π΅οΈ 1. Check Execution Logs to Identify Slow Nodes
β
How:
- Go to
Executions β click a slow run
- Look at node timings in the UI
- Find out which node(s) take the longest
Fix:
- Optimize or reduce external API calls
- Replace slow nodes (e.g., avoid unnecessary HTTP requests)
- Batch processing if you're iterating over large data
π‘ 2. External APIs Are Slow or Rate-Limited
Symptoms:
- HTTP Request nodes take 2β10+ seconds each
- Delays in services like Gmail, Airtable, Notion, etc.
Fix:
- Use SplitInBatches node to break large API jobs into chunks
- Use caching if data doesnβt need to be fetched every time
- Reduce polling frequency
- Add retries with delays (Function + Wait node)
π§ 3. Too Much Data in a Single Workflow Run
Symptoms:
- Delayed responses
- n8n crashes or hangs on execution
- Webhook returns timeout
Fix:
- Use SplitInBatches to process arrays in smaller pieces
- Limit the number of items fetched at once
- Store large data in external systems (DB, Redis, file) instead of memory
π 4. Loops or Recursion Without Limits
Symptoms:
- Function node creates a loop
- Infinite or large recursive calls
Fix:
- Add loop guards using IF nodes or item count
- Consider breaking logic into sub-workflows using the Execute Workflow node
βοΈ 5. Not Using "Continue on Fail" + IF for Smart Flow Control
Symptoms:
- One failure blocks the entire path
- Workflows hang on errors or retries
Fix:
- Use "Continue On Fail" to allow other paths to run
- Catch and branch errors using an IF Node on
{{$json.error}}
β±οΈ 6. Delays or Wait Nodes Blocking the Flow
Symptoms:
- You added Wait or Delay nodes intentionally, but forgot to split logic
Fix:
- Move long waits to a sub-workflow
- Use webhooks or database flags to resume execution when ready
- Use Cron or polling to check for conditions
π§° 7. Your Server Is Underpowered
Symptoms:
- Sluggish editor, slow executions even for simple workflows
Fix:
Monitor CPU, RAM, disk I/O
Scale your instance:
Minimum for production: 2 vCPUs, 4β8GB RAM
For large workflows: 4β8 vCPUs, 8β16GB RAM
Use Redis queue mode (enterprise) for high concurrency
π 8. Too Many Simultaneous Executions
Symptoms:
- Queue is delayed
- Webhook or cron triggers piling up
Fix:
- Use concurrency limits (e.g., with queues or external throttle)
- Upgrade your DB (Postgres > SQLite)
- Set max executions using environment variables:
EXECUTIONS_PROCESS=main
EXECUTIONS_TIMEOUT=3600
EXECUTIONS_DATA_PRUNE=true
π 9. Workflow Design Is Too Monolithic
Fix:
- Break large workflows into smaller reusable sub-flows
- Use Execute Workflow node to modularize
- Offload heavy logic to external services (e.g., serverless functions)
π§ͺ 10. Debug & Test in Segments
Fix:
- Use the "Execute Node" feature to run node-by-node
- Log timestamps or durations between steps
- Use Function node to measure time:
console.log('Start: ' + new Date().toISOString());
β
Quick Optimization Checklist
| β
Check | Optimization |
| --------------------------------- | ----------------------- |
| Use SplitInBatches? | For large lists |
| Avoid unnecessary HTTP/API calls? | Cache or filter inputs |
| Long waits offloaded? | Sub-workflows or delays |
| Resource limits OK? | Monitor CPU/RAM |
| Looping controlled? | Use guards |
| Data size minimized? | Avoid payload bloat |
| Modular design? | Use sub-workflows |