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
..