in reply to Re: Issue with dbi connect_cached method
in thread Issue with dbi connect_cached method

Hi, Choroba
Thank you for the revert.
Yes, "connect" seems to be working instead of connect_cached (i tried this before but didn't work, not sure why).
Instances of "connect" have been replaced with the "connect_cached", long back in the code to improve the performance I guess.
Please, note that "connect_cached" is causing an issue only for oracle DB whereas it seems to be working for the SQL server.
Can you please shed some light on this?

Thank you

  • Comment on Re^2: Issue with dbi connect_cached method

Replies are listed 'Best First'.
Re^3: Issue with dbi connect_cached method
by Corion (Patriarch) on Apr 22, 2022 at 16:59 UTC

    Most likely, the database server has disconnected the database connection and now ->connect_cached tries to reuse the connection but times out. Consider speaking with your database administrator and network administrator after what time the database and the network will drop an existing connection.

    Another problem can be if you use the fork system call. Ideally, DBD::Oracle (and the underlying database library) would detect that and reestablish the connection, but maybe they don't and try to reuse the connection of the parent.

      Thank you Corion for the revert.
      Here lexical scoped variable $dbh has been used (not a global one), so here it should have been created a new connection, isn't it? but somehow it seems to act as a global variable.
      Is there any downside if I retain the "connect" itself instead of "connect_cached", at least for this problematic part of the code.

      Please suggest.
      Regards,

        The point of the ->connect_cached method is to keep a global cache of the connection.

        In an ideal world, ->connect_cached is a drop-in replacement for ->connect, but reusing an old connection.

        The downside of using ->connect is that maybe you are a bit slower because you rebuild the network connection. But that is better than having a long timeout, in your case.