Descreva o problema/erro/pergunta
Executões paralelas usando o nó nativo Oracle Database abrem um grande número de sessões Oracle simultâneas, e o banco de dados começa a sofrer com contenção de latch.
O problema central é que o alto número de conexões Oracle abertas simultaneamente pelo n8n está sobrecarregando o banco de dados. Cada conexão do n8n mapeia para uma sessão dedicated-server no Oracle, então quando muitas execuções são executadas em paralelo, dezenas de sessões são abertas ao mesmo tempo e a instância começa a sofrer com contenção de latch. Meu objetivo é limitar quantas sessões Oracle podem estar abertas ao mesmo tempo para que o banco de dados pare de ser sobrecarregado.
Estou executando em modo queue com 3 contêineres worker e N8N_WORKER_CONCURRENCY=10 (portanto até ~30 execuções simultâneas).
Meu entendimento atual (por favor, corrija-me): em modo queue cada worker é um processo separado, então presumo que o connection pool do Oracle é criado por worker, significando que Pool Max se aplica por worker e não globalmente.
Perguntas:
-
O connection pool do Oracle é criado por processo worker (então Pool Max é por worker), ou é compartilhado de alguma forma?
-
Durante execuções paralelas, o nó verifica uma conexão por execução (1:1), ou por query / por item?
-
Para reduzir sessões Oracle simultâneas, qual é a abordagem recomendada: diminuir
N8N_WORKER_CONCURRENCY, reduzir o número de workers, diminuirPool Max, ou uma combinação? Qual é a alavanca primária correta? -
Se eu diminuir
Pool Max, as solicitações de conexão extras ficam em fila e esperam por uma conexão livre em vez de sobrecarregar o BD? -
Este nó executa node-oracledb em modo Thin ou Thick por padrão? Se Thick,
UV_THREADPOOL_SIZEprecisa ser ajustado junto com Pool Max?
Qual é a mensagem de erro (se houver)?
Nenhum erro no nível da aplicação no n8n. O sintoma está no lado do Oracle: dezenas de sessões ativas executando o mesmo SQL_ID simultaneamente, travadas em latch: cache buffers chains e cpu runqueue. Amostra 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
(dezenas mais, mesmo SQL_ID, mesmos eventos de espera)
Por favor, compartilhe seu workflow
(Não relevante para esta pergunta. O problema é concorrência de conexão/sessão, não um workflow específico.)
Compartilhe o resultado retornado pelo último nó
(Não aplicável.)
Configuração atual do pool 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: não definido
-
Connection Timeout: 0
-
Transport Connection Timeout: 20
-
Keepalive Probe Interval: 60
Informações sobre sua configuração n8n
-
Versão do n8n: Version 2.20.7-exp.0
-
Versão do nó Oracle Database: Oracle Database node version 1 (Latest)
-
Banco de dados (banco de dados próprio do n8n): PostgreSQL 16
-
Versão do Oracle Database (o BD de destino):
-
n8n EXECUTIONS_PROCESS / modo: modo queue (Redis/Bull), 3 workers,
N8N_WORKER_CONCURRENCY=10 -
Executando n8n via: Docker (auto-hospedado)
-
Sistema operacional: RedHat