Just thought I'd report on a puzzling bug ... for us it was caused by a
firewall, but I can imagine you'd get the same behaviour if packets to
your Oracle box starting falling into a hole.

Symptom:
 Apache children hanging for almost exactly 12 minutes on DB
 transactions, usually early weekday mornings.

Underlying cause:
 A firewall was breaking idle TCP sessions, including connections
 between Apache & Oracle, causing packets to be 'mysteriously' dropped.

Problem:
 Apache::DBI's ping check worked fine, but when the dbh was ejected from
 the cache (and so went out of scope), something in the DESTROY stack
 was blocking, and holding the child up for 12m. I'm guesing the
 underlying DBD::Oracle code was trying to do a nice shutdown on the
 dbh, but obviously couldn't.

Quick hack:
 Tweak Apache::DBI to keep the ejected dbh in scope, in a global @array
 or something, and perform a daily/weekly restart on apache.

My guess at a proper solution:
 Some way of flagging the DBH as broken, so that underlying DBD::*
 drivers don't try to use it during a DESTROY call, or something.

Our solution:
 Reconfigure the firewall ;)

 - Adam

Reply via email to