Hello,

there is memory leaking somewhere. I think it is in DBI.
Please, try this source code (replace dbname, username and password,
please):
###########################################
use strict;
use DBI; 
my $sql = "INSERT INTO test01 select * from test02 where column01 = ?";
my($database, $user, $password) = ('xmplibero@orcela','dbuser1','dbuser1');
my $dbh = DBI->connect("dbi:Informix:$database", $user, $password, 
  {RaiseError => 0, PrintError => 1, AutoCommit => 0, ChopBlanks => 1});
$dbh->do ("CREATE TABLE test01 (column01 int NOT NULL,column02 char(10) NOT
NULL)");
$dbh->do ("CREATE TABLE test02 (column01 int NOT NULL,column02 char(10) NOT
NULL)");
for (1..100000) {
        my $sh = $dbh->prepare($sql);
        $sh->finish;
}
$dbh->disconnect;
###########################################

I have launched this script with those results:

memory leaking          SQL command
--------------          -------------
no                      "INSERT INTO table1 SELECT * FROM table2 WHERE
column01 = 1"
no                      "SELECT * FROM table2 WHERE column01 = ?"
no                      "INSERT INTO test01 (column01) values (?)"
YES                     "INSERT INTO table1 SELECT * FROM table2 WHERE
column01 = ?"

with the SAME results on those configurations:

OS                      db server               Perl version
----------              --------                ------------
HPUX 11.00              Informix                5.6.1
HPUX 11.00              Informix                5.005_03
Windows NT 4.0  Informix                5.6.1
Windows NT 4.0  Informix                5.005_03
Windows NT 4.0  MSSQL                   5.6.1
Windows NT 4.0  MSSQL                   5.005_03


So I think memory leaking is caused due to DBI.
I do not believe there is the same bug in Informix and MSSQL with the same
type of SQL command.
But I have no another DB server to test it. :-(

Used packages:
--------------
DBI-1.18, DBI-1.20
DBD-Informix-1.00.PC1
DBD-ADO-2.1

P.S. I was monitoring memory allocation via "top" on HPUX (column SIZE) and
via "Task manager" on Windows NT 4.0.
P.S.2. I have temporarily solved this problem via fork (one fork per one
iteration), but I think solving bug is better way.

Thank you for your time.
Perl -V infos follow.
--
Michal Polak
system programmer, TurboConsult s.r.o.
[EMAIL PROTECTED], [EMAIL PROTECTED]
ICQ: 106342077
Tel: +420 5 32 161 111


***********************************

** HP-UX 11.00

***********************************

$ uname -a

HP-UX orcela B.11.00 U 9000/800 573706537 unlimited-user license

$ perl -V

Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:

Platform:

osname=hpux, osvers=11.00, archname=PA-RISC2.0

uname='hp-ux orcela b.11.00 u 9000800 573706537 unlimited-user license '

config_args='-Dcc=gcc -Dprefix=/opt/perl/5.6.1_dynamic'

hint=previous, useposix=true, d_sigaction=define

usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef

useperlio=undef d_sfio=undef uselargefiles=undef usesocks=undef

use64bitint=undef use64bitall=undef uselongdouble=undef

Compiler:

cc='gcc', ccflags
='-D_HPUX_SOURCE -L/lib/pa1.1 -DUINT32_MAX_BROKEN -I/usr/local/include',

optimize='-O',

cppflags='-D_HPUX_SOURCE -L/lib/pa1.1 -DUINT32_MAX_BROKEN -I/usr/local/inclu
de'

ccversion='', gccversion='2.7.2.3', gccosandvers='hpux11.00'

intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321

d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8

ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=4

alignbytes=8, usemymalloc=y, prototype=define

Linker and Libraries:

ld='ld', ldflags =' -L/usr/local/lib'

libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib

libs=-lnsl -lnm -lndbm -ldld -lm -lc -lndir -lcrypt -lsec

perllibs=-lnsl -lnm -ldld -lm -lc -lndir -lcrypt -lsec

libc=/lib/libc.sl, so=sl, useshrplib=false, libperl=libperl.a

Dynamic Linking:

dlsrc=dl_hpux.xs, dlext=sl, d_dlsymun=undef,
ccdlflags='-Wl,-E -Wl,-B,deferred '

cccdlflags='-fpic', lddlflags='-b -L/usr/local/lib'



Characteristics of this binary (from libperl):

Compile-time options:

Built under hpux

Compiled at Jun 1 2001 15:47:28

@INC:

/opt/perl/5.6.1_dynamic/lib/5.6.1/PA-RISC2.0

/opt/perl/5.6.1_dynamic/lib/5.6.1

/opt/perl/5.6.1_dynamic/lib/site_perl/5.6.1/PA-RISC2.0

/opt/perl/5.6.1_dynamic/lib/site_perl/5.6.1

/opt/perl/5.6.1_dynamic/lib/site_perl

..





***********************************

** MS Windows NT 4.0

***********************************

Summary of my perl5 (revision 5 version 6 subversion 1) configuration:

Platform:

osname=MSWin32, osvers=4.0, archname=MSWin32-x86

uname=''

config_args='undef'

hint=recommended, useposix=true, d_sigaction=undef

usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef

useperlio=undef d_sfio=undef uselargefiles=undef usesocks=undef

use64bitint=undef use64bitall=undef uselongdouble=undef

Compiler:

cc='cl', ccflags
='-nologo -O1 -MD -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_MSVCRT_READ
FIX',

optimize='-O1 -MD -DNDEBUG',

cppflags='-DWIN32'

ccversion='', gccversion='', gccosandvers=''

intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234

d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10

ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=4

alignbytes=8, usemymalloc=n, prototype=define

Linker and Libraries:

ld='', ldflags
='-nologo -nodefaultlib -release -libpath:"l:\pgm\perl\5.6.1\perl\lib\CORE" 
-machine:x86'

libpth=""C:\Program Files\Microsoft Visual Studio\VC98"\lib"

libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib

oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib
odbc32.lib odbccp32.lib msvcrt.lib

perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.

lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib
version.lib odbc32.lib odbccp32.lib msvcrt.lib

libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl56.lib

Dynamic Linking:

dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '

cccdlflags=' ',
lddlflags='-dll -nologo -nodefaultlib -release -libpath:"l:\pgm\perl\5.6.1\p
erl\lib\CORE" -machine

:x86'



Characteristics of this binary (from libperl):

Compile-time options:

Built under MSWin32

Compiled at Jun 6 2001 20:02:09

@INC:

//MAKRELA/Shared/Pgm/Perl/5.6.1/perl/lib

//MAKRELA/Shared/Pgm/Perl/5.6.1/perl/site/lib

..





Reply via email to