Describa el problema/error/pregunta
Las ejecuciones en paralelo usando el nodo nativo de Oracle Database abren un gran número de sesiones simultáneas de Oracle, y la base de datos comienza a sufrir contención de latches.
El problema principal es que el alto número de conexiones de Oracle abiertas simultáneamente por n8n está abrumando la base de datos. Cada conexión de n8n se asigna a una sesión de servidor dedicado en Oracle, por lo que cuando muchas ejecuciones se ejecutan en paralelo, se abren docenas de sesiones al mismo tiempo y la instancia comienza a sufrir contención de latches. Mi objetivo es limitar cuántas sesiones de Oracle pueden estar abiertas al mismo tiempo para que la base de datos deje de estar abrumada.
Estoy ejecutando en modo cola con 3 contenedores de worker y N8N_WORKER_CONCURRENCY=10 (hasta ~30 ejecuciones concurrentes).
Mi comprensión actual (por favor corrígeme): en modo cola cada worker es un proceso separado, por lo que asumo que el pool de conexiones de Oracle se crea por worker, lo que significa que Pool Max se aplica por worker y no globalmente.
Preguntas:
-
¿Se crea el pool de conexiones de Oracle por proceso de worker (por lo que Pool Max es por worker), o se comparte de alguna manera?
-
Durante ejecuciones en paralelo, ¿el nodo retira una conexión por ejecución (1:1), o por query / por elemento?
-
Para reducir las sesiones concurrentes de Oracle, ¿cuál es el enfoque recomendado: reducir
N8N_WORKER_CONCURRENCY, reducir el número de workers, reducirPool Max, o una combinación? ¿Cuál es el principal? -
Si reduzco
Pool Max, ¿las solicitudes de conexión adicionales se encolan y esperan una conexión libre en lugar de abrumar la BD? -
¿Este nodo ejecuta node-oracledb en modo Thin o Thick por defecto? Si es Thick, ¿es necesario ajustar
UV_THREADPOOL_SIZEjunto con Pool Max?
¿Cuál es el mensaje de error (si hay alguno)?
No hay error a nivel de aplicación en n8n. El síntoma está del lado de Oracle: docenas de sesiones activas ejecutando el mismo SQL_ID simultáneamente, atrapadas en latch: cache buffers chains y cpu runqueue. Muestra resumida:
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
(docenas más, mismo SQL_ID, mismos eventos de espera)
Por favor comparta su workflow
(No es relevante para esta pregunta. El problema es la concurrencia de conexiones/sesiones, no un workflow específico.)
Comparta la salida devuelta por el último nodo
(No aplica.)
Configuración actual del pool de Oracle (por credencial)
-
Pool Min: 0
-
Pool Max: 600
-
Pool Increment: 5
-
Pool Maximum Session Life Time: 3600
-
Pool Connection Idle Timeout: 180
-
Connection Class Name: no configurado
-
Connection Timeout: 0
-
Transport Connection Timeout: 20
-
Keepalive Probe Interval: 60
Información sobre su instalación de n8n
-
Versión de n8n: Version 2.20.7-exp.0
-
Versión del nodo de Oracle Database: Oracle Database node version 1 (Latest)
-
Base de datos (la propia de n8n): PostgreSQL 16
-
Versión de Oracle Database (la BD objetivo):
-
Modo n8n EXECUTIONS_PROCESS / mode: modo cola (Redis/Bull), 3 workers,
N8N_WORKER_CONCURRENCY=10 -
Ejecutando n8n mediante: Docker (autoalojado)
-
Sistema operativo: RedHat