in reply to fetchall_arrayref({}) call freezing
DBI 1.607 is from July 2008 and DBD::ODBC 1.16 is from May 2008 almost 6 years old now. I was going to suggest you supplied a DBD::ODBC trace but as your version is so old it is almost before I took over its maintenance and the tracing is rather poor.
I know people always say this but can't you upgrade to a newer DBI and DBD::ODBC?
As a last resort, you can try enabling tracing in the ODBC Administrator and then when your code hangs, examine it to show me what were the last calls.
In Section
Seekers of Perl Wisdom