Problem/Fehler/Frage beschreiben
Parallele Ausführungen mit dem nativen Oracle-Database-Node öffnen eine große Anzahl gleichzeitiger Oracle-Sessions, und die Datenbank leidet unter Latch-Contention.
Das Kernproblem ist, dass die hohe Anzahl von Oracle-Verbindungen, die n8n gleichzeitig öffnet, die Datenbank überfordert. Jede n8n-Verbindung entspricht einer Dedicated-Server-Session in Oracle, sodass bei vielen parallelen Ausführungen Dutzende von Sessions gleichzeitig geöffnet werden und die Instanz unter Latch-Contention leidet. Mein Ziel ist es, die Anzahl der gleichzeitig offenen Oracle-Sessions zu begrenzen, damit die Datenbank nicht überfordert wird.
Ich führe im Queue-Modus mit 3 Worker-Containern und N8N_WORKER_CONCURRENCY=10 aus (also bis zu ca. 30 gleichzeitige Ausführungen).
Mein derzeitiges Verständnis (bitte korrigieren Sie mich): Im Queue-Modus ist jeder Worker ein separater Prozess, daher nehme ich an, dass der Oracle-Verbindungspool pro Worker erstellt wird, was bedeutet, dass Pool Max pro Worker und nicht global gilt.
Fragen:
-
Wird der Oracle-Verbindungspool pro Worker-Prozess erstellt (also Pool Max pro Worker), oder wird er irgendwie geteilt?
-
Während paralleler Ausführungen: Prüft der Node eine Verbindung pro Ausführung (1:1) aus, oder pro Query/pro Element?
-
Um gleichzeitige Oracle-Sessions zu reduzieren, was ist der empfohlene Ansatz:
N8N_WORKER_CONCURRENCYsenken, die Anzahl der Worker reduzieren,Pool Maxsenken oder eine Kombination? Welcher ist der richtige primäre Hebel? -
Wenn ich
Pool Maxsenke, werden zusätzliche Verbindungsanfragen in die Warteschlange eingereiht und warten auf eine freie Verbindung, statt die DB zu überfordern? -
Führt dieser Node node-oracledb standardmäßig im Thin- oder Thick-Modus aus? Falls Thick, muss
UV_THREADPOOL_SIZEneben Pool Max angepasst werden?
Wie lautet die Fehlermeldung (falls vorhanden)?
Kein Fehler auf Anwendungsebene in n8n. Das Symptom liegt auf der Oracle-Seite: Dutzende aktive Sessions führen dieselbe SQL_ID gleichzeitig aus und bleiben bei latch: cache buffers chains und cpu runqueue hängen. Gekürzte Probe:
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
(Dutzende weitere, gleiche SQL_ID, gleiche Wait-Events)
Bitte teilen Sie Ihren Workflow
(Nicht relevant für diese Frage. Das Problem ist die Verbindungs-/Session-Concurrency, nicht ein bestimmter Workflow.)
Ausgabe des letzten Nodes
(Nicht zutreffend.)
Aktuelle Oracle-Pool-Konfiguration (pro Credential)
-
Pool Min: 0
-
Pool Max: 600
-
Pool Increment: 5
-
Pool Maximum Session Life Time: 3600
-
Pool Connection Idle Timeout: 180
-
Connection Class Name: nicht gesetzt
-
Connection Timeout: 0
-
Transport Connection Timeout: 20
-
Keepalive Probe Interval: 60
Informationen zu Ihrem n8n-Setup
-
n8n-Version: Version 2.20.7-exp.0
-
Oracle-Database-Node-Version: Oracle Database node version 1 (Latest)
-
Datenbank (n8n-eigene DB): PostgreSQL 16
-
Oracle-Database-Version (die Ziel-DB):
-
n8n EXECUTIONS_PROCESS / Modus: Queue-Modus (Redis/Bull), 3 Worker,
N8N_WORKER_CONCURRENCY=10 -
n8n wird ausgeführt über: Docker (selbst-gehostet)
-
Betriebssystem: RedHat