close

Tại sao workflow trong n8n chạy chậm? 8 nguyên nhân và cách khắc phục

Tác giả: Đông Tùng Ngày đăng: 03/09/2025 Chuyên mục: n8n
Disclosure
Website Tino blog được cung cấp bởi Tino Group. Truy cập và sử dụng website đồng nghĩa với việc bạn đồng ý với các điều khoản và điều kiện trong chính sách bảo mật - điều khoản sử dụng nội dung. Tino Group có thể thay đổi điều khoản sử dụng bất cứ lúc nào. Việc bạn tiếp tục sử dụng Tino blog sau khi thay đổi có nghĩa là bạn chấp nhận những thay đổi đó.
Why Trust Us
Các bài viết với hàm lượng tri thức cao tại Tino blog được tạo ra bởi các chuyên viên Marketing vững chuyên môn và được kiểm duyệt nghiêm túc theo chính sách biên tập bởi đội ngũ biên tập viên dày dặn kinh nghiệm. Mọi nỗ lực của chúng tôi đều hướng đến mong muốn mang đến cho cộng đồng nguồn thông tin chất lượng, chính xác, khách quan, đồng thời tuân thủ các tiêu chuẩn cao nhất trong báo cáo và xuất bản.

Workflow n8n chạy chậm thường do một trong bốn nhóm: máy chủ thiếu RAM hoặc CPU, workflow xử lý quá nhiều item trong một lần, cơ sở dữ liệu phình vì dữ liệu thực thi, và API bên ngoài phản hồi chậm. Xem tab Executions để biết node nào tốn thời gian nhất, rồi sửa đúng nhóm nguyên nhân.

Bài này liệt kê dấu hiệu, 8 nguyên nhân hay gặp và cách khắc phục workflow chậm trong n8n. Nếu workflow không chỉ chậm mà bị dừng giữa chừng, xem thêm lỗi timeout trong n8n; các lỗi API khác có ở bảng lỗi kết nối API. Nội dung đối chiếu docs.n8n.io ngày 22/10/2026.

Dấu hiệu workflow n8n đang chạy chậm

  • Thời gian chạy kéo dài bất thường: workflow đơn giản vốn mất vài giây nay mất hàng chục giây hoặc vài phút; so với lịch sử Executions thấy tăng gấp nhiều lần.
  • Một node “treo” lâu: HTTP Request, Database, Code mất nhiều thời gian mới trả kết quả.
  • Executions tồn đọng: nhiều lần chạy ở trạng thái đang chạy hoặc chờ, hàng đợi (queue mode) dồn lên.
  • Tài nguyên máy chủ cao (bản tự host): CPU liên tục trên 80–90%; RAM tăng vọt không giảm sau khi workflow xong, có thể dẫn tới hết bộ nhớ; ổ đĩa đọc ghi liên tục, nhất là khi dùng SQLite.
  • API bên ngoài chậm: node gọi Google Sheets, Salesforce, OpenAI phải chờ lâu.
  • Xuất hiện timeout hoặc lần chạy bị hủy: dấu hiệu workflow đã vượt giới hạn thời gian.
  • Giao diện n8n ì: mở workflow, sửa node, chuyển trang đều chậm khi workflow nặng đang chạy.

Làm sao biết workflow chậm ở đâu?

Mở một lần chạy chậm trong tab Executions và rê chuột lên từng node: n8n hiện thời gian node đó chạy trong lần thực thi. Node chiếm phần lớn thời gian cho biết nhóm nguyên nhân.

Sơ đồ chẩn đoán workflow n8n chạy chậm: mở Executions và rê chuột lên từng node để xem thời gian; HTTP Request hoặc API chậm là do bên ngoài, xem rate limit, phân trang, Timeout; node Code hoặc nhiều item là do dữ liệu, dùng Loop Over Items và Edit Fields; mọi node đều chậm và giao diện ì là do máy chủ, RAM, CPU, database phình

Ví dụ: các node xử lý logic chỉ mất vài mili giây nhưng node HTTP Request mất 30 giây thì gần như chắc chắn API bên ngoài là điểm nghẽn. Cách đọc chi tiết từng lần chạy có ở bài execution log trong n8n.

8 nguyên nhân khiến workflow n8n chạy chậm

1. Máy chủ thiếu CPU, RAM

n8n chạy nhiều workflow cùng lúc tốn CPU và RAM đáng kể. Máy chủ cấu hình thấp hoặc container Docker bị giới hạn tài nguyên sẽ nhanh chạm ngưỡng.

2. Xử lý quá nhiều dữ liệu trong một lần chạy

Mỗi node chuyển toàn bộ dữ liệu cho node sau. Node đọc Google Sheets hay HTTP Request trả về hàng chục nghìn bản ghi thì tất cả nằm trong bộ nhớ, các bước sau đều nặng.

3. Node Code xử lý nặng

Node Code linh hoạt nhưng dễ thành điểm nghẽn: vòng lặp lồng nhau, xử lý mảng lớn, gọi API trong code.

4. Trigger kiểm tra quá dày

Schedule Trigger (tên cũ: Cron) hoặc trigger polling chạy mỗi phút cho việc không cần tức thời tạo ra hàng nghìn lần chạy thừa mỗi ngày.

5. Vòng lặp gọi API cho từng item

Lặp qua hàng nghìn item và mỗi vòng gọi một API tạo ra số request khổng lồ, vừa chậm vừa dễ bị giới hạn tốc độ.

6. API bên ngoài hoặc mạng chậm

Workflow nhanh đến đâu cũng phải chờ API (CRM, Google API) trả lời. Mạng chập chờn giữa máy chủ n8n và dịch vụ ngoài, hoặc tới database PostgreSQL đặt ở máy khác, cũng thêm độ trễ.

7. Database phình vì dữ liệu thực thi

Mặc định n8n lưu dữ liệu của cả lần chạy thành công và lỗi, nhưng tự xóa bản cũ hơn 14 ngày hoặc khi vượt 10.000 bản (pruning bật sẵn, docs: Executions environment variables). Workflow xử lý file lớn hoặc chạy rất dày vẫn có thể làm database và thư mục binary data phình nhanh, khiến tải danh sách Executions, mở workflow đều chậm.

8. Phiên bản n8n cũ

Các bản cập nhật thường có cải tiến bộ nhớ và tốc độ. n8n 2.0 cũng đổi nhiều thứ ở tầng chạy (task runner cho node Code, driver SQLite mới, bỏ MySQL/MariaDB làm database). Xem cách cập nhật n8n trước khi nâng cấp.

Cách khắc phục workflow n8n chạy chậm

Giải pháp 1: Tối ưu môi trường và cấu hình (bản tự host)

1.1. Dọn dữ liệu thực thi đúng cách. Đặt các biến sau trong docker-compose.yml hoặc file .env:

BiếnMặc địnhÝ nghĩa và gợi ý
EXECUTIONS_DATA_PRUNEtrueTự xóa dữ liệu lần chạy cũ theo chu kỳ; giữ true
EXECUTIONS_DATA_MAX_AGE336Tuổi tối đa tính bằng giờ (336 giờ = 14 ngày). Muốn giữ 30 ngày, đặt 720; đặt 30 nghĩa là chỉ giữ 30 giờ
EXECUTIONS_DATA_PRUNE_MAX_COUNT10000Số lần chạy tối đa giữ lại; 0 = không giới hạn
EXECUTIONS_DATA_SAVE_ON_SUCCESSallĐặt none nếu không cần xem lại lần chạy thành công
EXECUTIONS_DATA_SAVE_ON_PROGRESSfalseGiữ false; bật lên sẽ ghi DB sau mỗi node
DB_SQLITE_VACUUM_ON_STARTUPfalseChỉ với SQLite: chạy VACUUM khi khởi động để thu nhỏ file; tốn thời gian khởi động
GENERIC_TIMEZONEAmerica/New_YorkĐặt Asia/Ho_Chi_Minh để Schedule Trigger chạy đúng giờ Việt Nam
Biến môi trường nên rà khi n8n chậm (theo Executions và Database environment variables, 22/10/2026)
environment:
  - EXECUTIONS_DATA_PRUNE=true
  - EXECUTIONS_DATA_MAX_AGE=720        # 30 ngày, tính bằng giờ
  - EXECUTIONS_DATA_PRUNE_MAX_COUNT=10000
  - EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
  - GENERIC_TIMEZONE=Asia/Ho_Chi_Minh

1.2. Chuyển từ SQLite sang PostgreSQL khi tải lớn. SQLite là một file, ghi đồng thời kém khi nhiều workflow chạy cùng lúc; PostgreSQL chịu tải đồng thời tốt hơn. Từ n8n 2.0, database chính chỉ còn SQLite hoặc PostgreSQL; MySQL/MariaDB không còn được hỗ trợ (v2.0 breaking changes).

Cảnh báo: chỉ đổi DB_TYPE=postgresdb rồi khởi động lại thì n8n tạo một database trống; workflow và credential cũ không tự chuyển sang. Làm đúng thứ tự: sao lưu, export workflow và credential, giữ nguyên N8N_ENCRYPTION_KEY, đổi cấu hình, rồi import. Hướng dẫn từng bước: đổi database n8n từ SQLite sang PostgreSQL; sao lưu trước bằng cách backup và restore workflow, credential n8n.

1.3. Nâng cấp tài nguyên. CPU hoặc RAM thường xuyên chạm 90–100% khi workflow chạy thì nâng gói VPS hoặc tăng giới hạn cho container. Tham khảo cấu hình tối thiểu để chạy n8n trên VPS và kinh nghiệm tối ưu hiệu suất self-host n8n; chuyển sang máy mạnh hơn theo cách chuyển n8n sang VPS mới.

Giải pháp 2: Thiết kế lại workflow

2.1. Chia lô bằng Loop Over Items. Đặt node Loop Over Items (tên cũ Split in Batches) ngay sau node lấy dữ liệu, Batch Size ví dụ 100. 10.000 đơn hàng thành 100 lô; mỗi vòng chỉ xử lý 100 item, ít tốn RAM, một lô lỗi không kéo cả quá trình.

2.2. Tách logic bằng sub-workflow. Workflow “Đơn hàng mới” đang làm quá nhiều việc (xác thực, email, Google Sheets, Slack, kho) có thể tách thành workflow chính “[Main] New Order” và các workflow con “[Sub] Send Confirmation Email”, “[Sub] Update Google Sheet”… gọi bằng node Execute Sub-workflow. Xem cách tạo sub-workflow.

Giải pháp 3: Xử lý dữ liệu lớn

3.1. Lấy dữ liệu theo trang. Đừng gọi một lần lấy 50.000 bản ghi. Node HTTP Request có tùy chọn Pagination: đặt tham số trang (page, limit, offset hoặc cursor) theo tài liệu API, ví dụ limit 200 và tăng page tới khi API trả mảng rỗng.

3.2. Bỏ trường thừa sớm. Node trả 50 trường nhưng bạn chỉ cần name, email, order_id: thêm node Edit Fields ngay sau, chỉ giữ các trường cần, tắt Include Other Input Fields.

Giải pháp 4: Tối ưu trigger và node

4.1. Ưu tiên webhook thay vì polling. Schedule Trigger chạy mỗi phút là 1.440 lần mỗi ngày dù không có đơn mới. Nếu nền tảng (Shopify, WooCommerce, Typeform…) hỗ trợ webhook, cho nó gọi node Webhook chỉ khi có sự kiện.

4.2. Viết code gọn trong node Code. Ưu tiên node có sẵn; giữ node Code cho biến đổi dữ liệu đơn giản; đưa lời gọi API ra node HTTP Request riêng.

Giải pháp 5: Cập nhật n8n

Cập nhật lên bản ổn định mới để nhận cải tiến hiệu suất, sau khi đọc ghi chú phát hành và sao lưu. Hướng dẫn: cách cập nhật n8n lên phiên bản mới.

Giải pháp 6: Queue mode cho tải lớn (nâng cao)

Với hệ thống nhiều workflow chạy đồng thời, bật EXECUTIONS_MODE=queue kèm Redis: tiến trình chính nhận việc và đưa vào hàng đợi, các worker xử lý. Giao diện không bị kéo chậm bởi workflow nặng và có thể thêm worker khi tải tăng. Queue mode cần PostgreSQL.

Muốn chạy n8n 24/7 mà không tự cài? VPS n8n của Tino cài sẵn n8n trên VPS NVMe đặt tại Việt Nam; bạn vẫn có quyền root để cấu hình. Xem cấu hình và giá trên trang sản phẩm.

Kết luận

Workflow chậm hiếm khi do một lý do duy nhất. Đo trước ở Executions, xác định node tốn thời gian, rồi xử lý theo nhóm: API thì phân trang và giới hạn tốc độ, dữ liệu thì chia lô và bỏ trường thừa, máy chủ thì dọn dữ liệu thực thi đúng đơn vị giờ, nâng tài nguyên, chuyển PostgreSQL theo đúng quy trình.

Những câu hỏi thường gặp

Tại sao node HTTP Request thường chậm?

Node này phụ thuộc tốc độ phản hồi của API bên ngoài, giới hạn tốc độ (rate limit) và chất lượng mạng. Đặt Timeout, bật Retry On Fail và lấy dữ liệu theo trang để giảm thời gian chờ.

Đã tối ưu mà workflow vẫn chậm thì làm gì tiếp?

Xem log của n8n (docker logs với bản Docker) để tìm cảnh báo bộ nhớ; tạm vô hiệu hóa từng node (Deactivate) để khoanh vùng; theo dõi tài nguyên máy chủ khi workflow chạy; hỏi thêm trên diễn đàn cộng đồng n8n kèm ảnh Executions.

Theo dõi tài nguyên n8n đang dùng bằng cách nào?

Trên Linux dùng htop cho CPU, RAM; nếu chạy Docker dùng docker stats để xem từng container theo thời gian thực.

Xóa dữ liệu thực thi cũ có làm n8n nhanh hơn không?

Có, khi database đã lớn: bảng executions nhỏ lại thì tải danh sách Executions, mở workflow nhanh hơn. Pruning bật sẵn; chỉ cần kiểm tra EXECUTIONS_DATA_MAX_AGE (đơn vị giờ) và EXECUTIONS_DATA_PRUNE_MAX_COUNT phù hợp. Với SQLite, file chỉ thu nhỏ sau khi VACUUM.

Làm sao biết chậm do workflow của tôi hay do API bên thứ ba?

Trong chi tiết một lần chạy, rê chuột qua từng node để xem thời gian. Node logic chạy vài mili giây còn HTTP Request mất hàng chục giây thì nguyên nhân gần như chắc chắn ở API bên ngoài.

Workflow chỉ chậm vào một số giờ trong ngày, vì sao?

Thường do API bạn gọi đang giờ cao điểm nên trả lời chậm, hoặc nhiều Schedule Trigger cùng đặt chạy một giờ (ví dụ đúng 8:00) tranh tài nguyên máy chủ. Rải lịch chạy lệch nhau vài phút.

Có nên chuyển SQLite sang PostgreSQL không?

Nên, khi nhiều workflow chạy đồng thời hoặc định dùng queue mode. SQLite là một file nên ghi đồng thời phải xếp hàng; PostgreSQL xử lý nhiều kết nối cùng lúc tốt hơn. Nhớ chuyển dữ liệu theo đúng quy trình export, import và giữ N8N_ENCRYPTION_KEY.

Đông Tùng

Senior Technology Writer

Là cử nhân Quản trị kinh doanh của Trường Đại học Tài chính - Marketing, Tùng bắt đầu làm việc tại Tino Group từ năm 2021 ở vị trí Content Marketing để thỏa mãn niềm đam mê viết lách của bản thân. Sở hữu khả năng sáng tạo đặc biệt, anh cùng đội ngũ của mình đã tạo nên những chiến dịch quảng cáo độc đáo cùng vô số bài viết hữu ích về nhiều chủ đề khác nhau. Sự tỉ mỉ, kiên trì và tinh thần sáng tạo của Tùng đã góp phần lớn vào thành công của Tino Group trong lĩnh vực marketing trực tuyến.

Xem thêm bài viết

Bài viết liên quan

Xem nhiều