On Tue, Feb 25, 2003 at 05:30:31PM -0500, Thomas Good wrote:
> On Tue, 25 Feb 2003, Tim Bunce wrote:
>
> > > While I was using 5.8 large data transfers via DBI failed consistently.
> > > I have compared notes with others (including Lincoln Stein) and this
> > > problem is easily reproduced. In fact, I can't stop reproducing it. ;-)
> > >
> > A self-contained test case would be ideal!
>
> Hi, I will try to put this together, meanwhile here is a summary:
>
> I have a postgres table with 220 individual patient skills -
> these skills become questions on a long form. Another table
> holding live patient records is queried and the returned values
> serve as popup_menu() defaults
>
> Tr ( td ( "$skill[0]" ) <-- Here is the string/question
> td ( popup_menu( ...
> -values=>['1 - Excellent', '2 - Adequate', '3 - Needs Attention',
> '4 - Needs Immediate Attention', '5 - Not Applicable'],
> -default=>"$row->{item_01}" <-- Here is the returned value
> ...
>
> On wellworn test equipment (all ide, 64M RAM, clock speed of 300MHz) running
> Slackware 8.1, perl 5.6.1, DBI 1.25, Apache 1.3.26, DBD-Pg 1.21, Postgres 7.3.1
> this script runs.
>
> On a brand new IBM eServer (LSI SCSI, 512M RAM, 2 GHz clock) running Redhat 8.0,
> perl 5.8.0, DBI 1.28, Apache 2.0.40, DBD-Pg 1.21 the script hangs.
> I tried commenting out the defaults, etc. Only removing both queries allowed
> the script to run. The CGI form was not a problem, even when I doubled the
> length as a test.
Enable tracing to a log file (eg set DBI_TRACE env var to something
like "6=/tmp/dbi.log") and then run the script using truss
(or similar tool that shows operating system calls).
As a (better) alternative to using truss you could do a kill -QUIT
on the process once it has hung and then get a stack trace from the
core file.
That would be useful, but to be *really* helpful the DBI and DBD::Pg
would need to be compiled and linked with debugging enabled (ie -g
option to the compiler/linker).
For the DBI you can do that by simply rebuilding it starting with
"perl Makefile.PL -g".
For DBD::Pg you may need to run "perl Makefile.PL" and then hack the
generated Makefile: Add -g as an option on the "CCCMD = $(CC) ..."
line and also to the "OTHERLDFLAGS =" line.
Once you've got the core file you can get a stack dump using a debugger
like gdb ("gdb /path/to/the/perl/you/used /path/to/core" then "bt".)
Tim.