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

From Tatsuo Ishii
Subject Re: [HACKERS] vacuum process size
Date
Msg-id 199908240112.KAA01811@ext16.sra.co.jp
Whole thread Raw
In response to RE: [HACKERS] vacuum process size  (Mike Mascari <mascarim@yahoo.com>)
Responses Re: [HACKERS] vacuum process size
Re: [HACKERS] vacuum process size
List pgsql-hackers
Mike, 

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

I have tested your idea and found even more improved memory usage
(86MB vs. 43MB). Standard vacuum consumes as much as 478MB memory with
deleting 5000000 tuples that would not be acceptable for most
configurations. I think we should fix this as soon as possible.  If
there's no objection, I will commit included patches to the stable
tree (seems Tom has more aggressive idea, so I'll leave the current
tree as it is).
---
Tatsuo Ishii
-------------------------------------------------------------------
*** vacuum.c.orig    Sat Jul  3 09:32:40 1999
--- vacuum.c    Tue Aug 24 10:08:43 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,2538 ---- static void vc_vpinsert(VPageList vpl, VPageDescr vpnew) {
+ #define PG_NPAGEDESC 1024
+ static uint num_pages;      /* allocate a VPageDescr entry if needed */     if (vpl->vpl_num_pages == 0)
!     {
!         vpl->vpl_pagedesc = (VPageDescr *) palloc(PG_NPAGEDESC * sizeof(VPageDescr));
!         num_pages = PG_NPAGEDESC;
!     }
!     else if (vpl->vpl_num_pages >= num_pages)
!     {
!         num_pages *= 2;
!         vpl->vpl_pagedesc = (VPageDescr *) repalloc(vpl->vpl_pagedesc, num_pages * sizeof(VPageDescr));
!     }     vpl->vpl_pagedesc[vpl->vpl_num_pages] = vpnew;     (vpl->vpl_num_pages)++; 


pgsql-hackers by date:

Previous
From: "Hiroshi Inoue"
Date:
Subject: RE: [HACKERS] Caution: tonight's commits force initdb
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] vacuum process size