Any thoughts on this problem? I've been running with this patch and it seems
to deal with the memory leak but no auto-vacuum. :(.

Thanks,
Rick Keiner

On 6/9/06, Rick Keiner <[EMAIL PROTECTED]> wrote:

There seems to be a bug in the memoryTruncate function in the pager. When
it iterates through the pages I saw that there were page numbers of 0 where
no action was being taken. As the number of deletes increased, the number of
page number 0s increased. By making the following modification I no longer
saw the memory leak.

  if( pPg->pgno<=dbSize && pPg->pgno != 0){

Everything seemed to be fine but I really don't understand enough about
the pager to know what impact this may have.  I'm only trying to observe
what's going on. The auto_vacuum still didn't return storage to the system,
though.

Is a page number of 0 valid?

hth,
Rick Keiner



On 6/7/06, Rick Keiner <[EMAIL PROTECTED]> wrote:
>
> Understood. It seems the pager code is more relevant.
>
> However, I am using the pragma. It works fine for a disk database. When
> the deletes are perfomed the database file returns back to the original
> size. I don't see any memory increase (just in case it was my code). The
> identical code is executed against a memory database and the memory
> continues to increase. After the deletes there is no decrease in storage and
> then the inserts are performed again and my storage usage increases. Delete
> and insert again and the storage continues to climb at the identical rate.
> If I double the number of inserts the storage increase doubles.
>
> This is what I am seeing. The number on the left is storage.
>
> Memory DB - Series of Inserts and deletes. The storage increases with
> each insert.
>
> 57.2M Insert 4000
> 69.9M Flush
> 69.9M Insert 4000
> 72.4M Flush
> 72.4M Insert 4000
> 75.7M Flush
> 75.6M Insert 4000
> 78.3M Flush
> 78.4M Insert 4000
> 80.9M
>
> Double the Records
>
> 57.1M Insert 8000
> 73.6M Flush
> 73.7M Insert 8000
> 78.8M Flush
> 78.9M Insert 8000
> 84.1M Flush
> 84.1M Insert 8000
> 89.4M Flush
> 89.5M
>
> Disk Database -
>
> File size - 8K
> 57.2M Insert 4000 File size - 1.9M
> 67.3M Flush - 9K
> 67.9M Insert 4000 - 1.9M
> 67.9M Flush - 9K
> 67.9M Insert 4000 - 1.9M
> 67.9M Flush - 9K
>
> Is there a minimum amount of storage that it will use until it starts to
> release storage?
>
> Thanks,
> Rick Keiner
>
> On 6/7/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
> > "Rick Keiner" <[EMAIL PROTECTED]> wrote:
> > > Yes, apparently. The :memory: DB doesn't show the storage being
> > reclaimed by
> > > the OS. In fact, after some more analysis, it's not reusing storage
> > already
> > > allocated. :( Could that be?
> > >
> > > After checking the vacuum.c code. It's not doing anything for an
> > in-memory
> > > DB. Would that be handled elsewhere?
> > >
> > >   /* Get the full pathname of the database file and create a
> > >   ** temporary filename in the same directory as the original file.
> > >   */
> > >   pMain = db->aDb[0].pBt;
> > >   zFilename = sqlite3BtreeGetFilename(pMain);
> > >   assert( zFilename );
> > >   if( zFilename[0]=='\0' ){
> > >     /* The in-memory database. Do nothing. Return directly to avoid
> > causing
> > >     ** an error trying to DETACH the vacuum_db (which never got
> > attached)
> > >     ** in the exit-handler.
> > >     */
> > >     return SQLITE_OK;
> > >   }
> > >
> >
> > Auto-vacuum and VACUUM, in spite of similar names, are very different
> > mechanisms.  You enable autovacuum by issuing a pragma:
> >
> >     PRAGMA auto_vacuum=ON;
> >
> > prior to creating any tables in your :memory: database.
> > --
> > D. Richard Hipp   <[EMAIL PROTECTED]>
> >
> >
>

Reply via email to