I run both your tests on Windows 2000 with ActiveState 
Perl 5.6.1 build 629, DBI 1.20 and DBD-Oracle 1.08.

Test1 was eating memory slowly (104KB per 1000 iterations)
Test2 after 5000 iterations had NO memory leak at all !

MaT
> -----Original Message-----
> From: Denis Pithon [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, August 29, 2001 10:07 PM
> To: dbi
> Subject: DBI, Oracle and Memory
> 
> 
> Hi,
> 
> I'm currently working on a test/demo using perl and DBI. I have
> encountered some memory problems with DBD:Oracle (I don't 
> have them with
> DBD:mysql). My test program has no memory leak from his own. I'm sure.
> I give you two pieces of code. They "eat" continuously my precious
> memory.
> 
> 1- connection/deconnection loop
> 
> ##############################################
> #!/usr/bin/perl
> use DBI;
> for (;;) {
>         $dbh=DBI->connect('dbi:Oracle:', "scott/tiger\@host");
>         print STDERR ".";
>         $dbh->disconnect;
> }
> ###############################################
> 
> This simple code take a little bit of memory (about 60kb for 900 cx/dx
> cycles). It's quite annoying but nothing compared to...
> 
> 
> 
> 2- do statements (really greedy)
> 
> ###############################################
> #!/usr/bin/perl
> use DBI;
> 
> $dbh=DBI->connect('dbi:Oracle:', "scott/tiger\@host");
> $dbh->{AutoCommit} = 0;
> $dbh->{RowCacheSize} = 1;
> $dbh->do("create table T (i int not null,p int not null,c char(60) not
> null)");
> 
> $i=1;
> for (;;) {
>         $j="$i";
>         $dbh->do("insert into T values ($i, $i, $j)");
>         if ($i > 1) {
>                 my $ni=$i-1;
>                 $query="update T set p=$i where i=$ni";
>                 $dbh->do($query);
>         }
> 
>         if ($i > 2) {
>                 my $di=$i-2;
>                 $query="delete from T where i=$di";
>                 $dbh->do($query);
>         }
>         $dbh->commit;
>         print STDERR ".";
>         $i++;
> }
> ##############################################
> 
> 
> This test just inserts a new row, updates the previous one (if a row
> exists) and deletes another row. Then it commits this transaction.
> 
> My real test which is a mix of this two pieces of code "eat" about
> 4kb/s... It connects do some transactions, deconnect/reconnect and son
> on...
> 
> I replace 'do' by 'prepare/execute' statements and things run really
> better. But I'm quite anxious about the cx/dx. I suspect I forgot some
> statements to properly clean up the DBI/DBD context after each
> deconnection. Does somebody have the same kind of problems ???
> A little help would be greatly appreciated!! 
> 
> Thanks a lot!
> 
> Denis
> 
> PS: my context 
> * Perl 5.6.0, DBI-1.19, DBD-Oracle-1.08
> * Oracle 8.1.7
> 
> $ perl -V
> Summary of my perl5 (revision 5.0 version 6 subversion 0) 
> configuration:
>   Platform:
>     osname=linux, osvers=2.2.17-8smp, archname=i386-linux
>     uname='linux porky.devel.redhat.com 2.2.17-8smp #1 smp fri nov 17
> 16:12:17 est 2000 i686 unknown '
>     config_args='-des -Doptimize=-O2 -march=i386 -mcpu=i686 -Dcc=gcc
> -Dcccdlflags=-fPIC -Dinstallprefix=/usr -Dprefix=/usr
> -Darchname=i386-linux -Dd_dosuid -Dd_semctl_semun -Di_db -Di_ndbm
> -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Uuselargefiles'
>     hint=recommended, useposix=true, d_sigaction=define
>     usethreads=undef use5005threads=undef useithreads=undef
> usemultiplicity=undef
>     useperlio=undef d_sfio=undef uselargefiles=undef 
>     use64bitint=undef use64bitall=undef uselongdouble=undef
> usesocks=undef
>   Compiler:
>     cc='gcc', optimize='-O2 -march=i386 -mcpu=i686', gccversion=2.96
> 20000731 (Red Hat Linux 7.1 2.96-79)
>     cppflags='-fno-strict-aliasing'
>     ccflags ='-fno-strict-aliasing'
>     stdchar='char', d_stdstdio=define, usevfork=false
>     intsize=4, longsize=4, ptrsize=4, doublesize=8
>     d_longlong=define, longlongsize=8, d_longdbl=define, 
> longdblsize=12
>     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
> lseeksize=4
>     alignbytes=4, usemymalloc=n, prototype=define
>   Linker and Libraries:
>     ld='gcc', ldflags =' -L/usr/local/lib'
>     libpth=/usr/local/lib /lib /usr/lib
>     libs=-lnsl -ldl -lm -lc -lcrypt
>     libc=/lib/libc-2.2.2.so, so=so, useshrplib=false, 
> libperl=libperl.a
>   Dynamic Linking:
>     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, 
> ccdlflags='-rdynamic'
>     cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
> 
> 
> Characteristics of this binary (from libperl): 
>   Compile-time options:
>   Built under linux
>   Compiled at Mar 23 2001 12:49:50
>   @INC:
>     /usr/lib/perl5/5.6.0/i386-linux
>     /usr/lib/perl5/5.6.0
>     /usr/lib/perl5/site_perl/5.6.0/i386-linux
>     /usr/lib/perl5/site_perl/5.6.0
>     /usr/lib/perl5/site_perl
> 
> 
> -- 
> Denis Pithon                             phone  +33 (0) 1 41 
> 40 02 13   
> Software Engineer                        fax    +33 (0) 1 41 
> 40 02 01   
> Lineo High Availability Group            mail   [EMAIL PROTECTED]
> 
> 

Reply via email to