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.

Reply via email to