Debugging ORA-03135 timeouts in Rails
Debugging ORA-03135 timeouts in Rails
ORA-03135 indica conexão quebrada com Oracle. Em apps Rails, costuma aparecer em workloads que ficam ociosos ou em redes instáveis.
Veja um checklist para reduzir quedas e achar a causa.
Common causes
- Firewall derrubando conexões ociosas.
wait_timeoutbaixo no listener.- Pools maiores que a capacidade real do DB.
- Queries lentas que estouram limite de rede.
Checklist rápido
1) Pool alinhado ao DB
Ajuste pool em database.yml para caber nos limites (sessions, processes). Ex.: pool: 10 por web process.
2) Keepalive na camada de rede
Habilite keepalive no host (net.ipv4.tcp_keepalive_time=60, tcp_keepalive_intvl=15, tcp_keepalive_probes=5) e confirme que firewalls aceitam.
3) Timeouts explícitos no cliente
Use connect_timeout e read_timeout (ou configs equivalentes do adapter) para falhar rápido.
4) Health checks do pool
Se usa Sidekiq/ActiveJob, habilite verificação de conexão antes de usar (verify! no checkout) para reciclar conexões quebradas.
5) Logs correlacionados
No listener, ative logs de sessão. No app, logue conn_id/sid/serial# para rastrear quedas por usuário ou job.
Mitigações imediatas
- Recicle conexões antigas com reaper no Rails (
reaping_frequency). - Reduza idle: use
pool_timeoutmenor e encerre workers zumbis. - Se o problema só ocorre em batch, execute jobs em batches menores.
Observabilidade mínima
Registre métricas de falhas de conexão e tempo médio de query. Alarmes em ORA-03135 e ORA-03114 ajudam a agir antes de saturar.