RE: [HACKERS] vacuum process size - Mailing list pgsql-hackers

From Mike Mascari
Subject RE: [HACKERS] vacuum process size
Date
Msg-id 19990820094119.20922.rocketmail@web103.yahoomail.com
Whole thread Raw
Responses Re: [HACKERS] vacuum process size
Re: [HACKERS] vacuum process size
List pgsql-hackers
At the very least, couldn't vc_vpinsert() double
vpl->vpl_num_pages whenever vpl->vpl_num_pages
needs to be expanded instead of expanding linearly
by PG_NPAGEDESC, or by the original 100?

Mike Mascari
(mascarim@yahoo.com)

--- Hiroshi Inoue <Inoue@tpf.co.jp> wrote:
> Hi all,
> 
> I found the following comment in utils/mmgr/aset.c.
> The high memory usage of big vacuum is probably
> caused by this
> change.
> Calling repalloc() many times with its size
> parameter increasing
> would need large amount of memory.
> 
> Should vacuum call realloc() directly ?
> Or should AllocSet..() be changed ?
> 
> Comments ?
> 
>  * NOTE:
>  *      This is a new (Feb. 05, 1999) implementation
> of the allocation set
>  *      routines. AllocSet...() does not use
> OrderedSet...() any more.
>  *      Instead it manages allocations in a block
> pool by itself, combining
>  *      many small allocations in a few bigger
> blocks. AllocSetFree() does
>  *      never free() memory really. It just add's
> the free'd area to some
>         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>  *      list for later reuse by AllocSetAlloc(). All
> memory blocks are
> free()'d
> 
> Regards.
> 
> Hiroshi Inoue
> Inoue@tpf.co.jp

> > *** vacuum.c.orig    Sat Jul  3 09:32:40 1999
> > --- vacuum.c    Thu Aug 19 17:34:18 1999
> > ***************
> > *** 2519,2530 ****
> >   static void
> >   vc_vpinsert(VPageList vpl, VPageDescr vpnew)
> >   {
> >
> >       /* allocate a VPageDescr entry if needed */
> >       if (vpl->vpl_num_pages == 0)
> > !         vpl->vpl_pagedesc = (VPageDescr *) palloc(100
> *
> > sizeof(VPageDescr));
> > !     else if (vpl->vpl_num_pages % 100 == 0)
> > !         vpl->vpl_pagedesc = (VPageDescr *)
> > repalloc(vpl->vpl_pagedesc, (vpl->vpl_num_pages +
> 100) *
> > sizeof(VPageDescr));
> >       vpl->vpl_pagedesc[vpl->vpl_num_pages] = vpnew;
> >       (vpl->vpl_num_pages)++;
> >
> > --- 2519,2531 ----
> >   static void
> >   vc_vpinsert(VPageList vpl, VPageDescr vpnew)
> >   {
> > + #define PG_NPAGEDESC 1000
> >
> >       /* allocate a VPageDescr entry if needed */
> >       if (vpl->vpl_num_pages == 0)
> > !         vpl->vpl_pagedesc = (VPageDescr *)
> > palloc(PG_NPAGEDESC * sizeof(VPageDescr));
> > !     else if (vpl->vpl_num_pages % PG_NPAGEDESC ==
> 0)
> > !         vpl->vpl_pagedesc = (VPageDescr *)
> > repalloc(vpl->vpl_pagedesc, (vpl->vpl_num_pages +
> PG_NPAGEDESC) *
> > sizeof(VPageDescr));
> >       vpl->vpl_pagedesc[vpl->vpl_num_pages] = vpnew;
> >       (vpl->vpl_num_pages)++;
> >

__________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com



pgsql-hackers by date:

Previous
From: "Ansley, Michael"
Date:
Subject: RE: [HACKERS] Postgres' lexer
Next
From: Leon
Date:
Subject: Re: [HACKERS] Postgres' lexer