Re: [HACKERS] vacuum process size
От | Tatsuo Ishii |
---|---|
Тема | Re: [HACKERS] vacuum process size |
Дата | |
Msg-id | 199908240112.KAA01811@ext16.sra.co.jp обсуждение исходный текст |
Ответ на | RE: [HACKERS] vacuum process size (Mike Mascari <mascarim@yahoo.com>) |
Ответы |
Re: [HACKERS] vacuum process size
Re: [HACKERS] vacuum process size |
Список | 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 по дате отправления: