Describe the problem/error/question
Parallel executions using the native Oracle Database node open a large number of concurrent Oracle sessions, and the database starts suffering from latch contention.
The core problem is that the high number of Oracle connections opened simultaneously by n8n is overwhelming the database. Each n8n connection maps to a dedicated-server session on Oracle, so when many executions run in parallel, dozens of sessions are opened at the same time and the instance starts suffering from latch contention. My goal is to cap how many Oracle sessions can be open at the same time so the database stops being overwhelmed.
I’m running in queue mode with 3 worker containers and N8N_WORKER_CONCURRENCY=10 (so up to ~30 concurrent executions).
My current understanding (please correct me): in queue mode each worker is a separate process, so I assume the Oracle connection pool is created per worker, meaning Pool Max applies per worker and not globally.
Questions:
-
Is the Oracle connection pool created per worker process (so Pool Max is per worker), or is it shared somehow?
-
During parallel executions, does the node check out one connection per execution (1:1), or per query / per item?
-
To reduce concurrent Oracle sessions, what is the recommended approach: lowering
N8N_WORKER_CONCURRENCY, reducing the number of workers, loweringPool Max, or a combination? Which one is the right primary lever? -
If I lower
Pool Max, do extra connection requests queue and wait for a free connection instead of overwhelming the DB? -
Does this node run node-oracledb in Thin or Thick mode by default? If Thick, does
UV_THREADPOOL_SIZEneed to be tuned alongside Pool Max?
What is the error message (if any)?
No application-level error in n8n. The symptom is on the Oracle side: dozens of active sessions running the same SQL_ID concurrently, stuck on latch: cache buffers chains and cpu runqueue. Trimmed sample:
SID SERIAL USER PROG TYPE STATE WAIT_CLASS EVENT
... 3332220 APPUSER node DED CPU Other cpu runqueue
... 3334370 APPUSER node DED CPU Concurrency latch: cache buffers chains
... 3331979 APPUSER node DED CPU Other latch free
... 3332223 APPUSER node DED CPU Other PGA memory operation
(dozens more, same SQL_ID, same wait events)
Please share your workflow
(Not relevant to this question. The issue is connection/session concurrency, not a specific workflow.)
Share the output returned by the last node
(Not applicable.)
Current Oracle pool config (per credential)
-
Pool Min: 0
-
Pool Max: 600
-
Pool Increment: 5
-
Pool Maximum Session Life Time: 3600
-
Pool Connection Idle Timeout: 180
-
Connection Class Name: not set
-
Connection Timeout: 0
-
Transport Connection Timeout: 20
-
Keepalive Probe Interval: 60
Information on your n8n setup
-
n8n version: Version 2.20.7-exp.0
-
Oracle Database node version: Oracle Database node version 1 (Latest)
-
Database (n8n’s own DB): PostgreSQL 16
-
Oracle Database version (the target DB):
-
n8n EXECUTIONS_PROCESS / mode: queue mode (Redis/Bull), 3 workers,
N8N_WORKER_CONCURRENCY=10 -
Running n8n via: Docker (self-hosted)
-
Operating system: RedHat