Post

Debugging ORA-03135 timeouts in Rails

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_timeout baixo 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_timeout menor 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.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.